[請益] PHP效能改善的問題

看板PHP作者 (TeA)時間15年前 (2009/08/07 11:59), 編輯推噓7(7014)
留言21則, 8人參與, 最新討論串1/2 (看更多)
不曉得颱風天的星期五,大家會不會比較有空回我問題...哈 話說最近小弟在寫演算法的程式,我採用IIS7+PHP5來寫, 一開始在跑小量的資料上是沒問題的,直到準備開始跑大量資料的時候 卻發現效能不彰的情況,後來我開始重新檢查我的程式碼,並且一步一步的 修正它,的確有明顯的改善執行時間(27X秒->197秒),但是還是在跑排列組合 大一點的資料的話,一樣會超過3600秒(為改善程式碼之前跑8個小時還沒跑完T_T) 後來我觀查一下變慢的原因,我發現主要時間花在對資料進行排列組合的步驟, 那我猜有兩種原因(以下限定程式只跑3回合) 1.排列組合項目很多。例如第2回合108個項目,到第3回合會組合到3753個,花費 33秒 2.IIS7對記憶體分配有特別的管理,因此在超過一定的量之後會變慢 (最後記憶體使用12.83MB)(我有設定ini_set( "memory_limit", "1024M" );) 3.陣列超過一定大小會變很慢(我猜暫存的陣列到後面應該超過32767列吧) 我個人改善的方法是減少迴圈數,能break掉的就break掉,至於 < 跟<= 的寫法 "感覺上",在整體演算法裡面算不痛不養的改善... 我也試著用APACHE來執行看看,結果發現效能是IIS7的2倍"差",跑出來我都囧了, 可能是我是windows環境,加上我也不知道APACHE怎麼把它給優化。 請問各位可以給我效能改善的意見嗎? 例如寫法上的問題、IIS7 or APACHE的設定,PHP參數設定之類的。 我現在當下想的到,但是還沒實作的 1.換成C語言來寫 2.試著不要全部用memory,把結果寫回disk,使記憶體、陣列使用變寫 但是第2項我怕問題根本不在那邊 >"< 最後,謝謝各位看完這篇文章。 -- 從一代一代的問候就看的出來 老手對新手的照顧 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.170.149

08/07 12:21, , 1F
換C寫比較實際 寫回disk基本上只會變更慢...
08/07 12:21, 1F

08/07 12:59, , 2F
用C吧.. 之前我也用PHP寫過運算複雜的程式 實在有慢
08/07 12:59, 2F

08/07 14:10, , 3F
你的"運算",是否一定要即時運算,可否先算好儲存在
08/07 14:10, 3F

08/07 14:11, , 4F
靜態網頁/資料庫,使用時動作盡量少
08/07 14:11, 4F

08/07 14:13, , 5F
排列組合這種運算..感覺不應該是網頁的工作
08/07 14:13, 5F

08/07 14:19, , 6F
看來只好改成C了...Orz
08/07 14:19, 6F

08/07 15:37, , 7F
用apriori algo?
08/07 15:37, 7F

08/07 16:15, , 8F
經過我的實驗,應該跟記憶體無關,後來吃到160 MB
08/07 16:15, 8F

08/07 16:16, , 9F
速度一樣很快,看來可能是迴圈太多圈了,PHP暈了
08/07 16:16, 9F

08/07 16:17, , 10F
回huge,我在寫CBA,跟apriori很像,基本上概念一樣
08/07 16:17, 10F

08/07 19:39, , 11F
處理這種問題之所以用php,可能是因為可以節省資料結
08/07 19:39, 11F

08/07 19:39, , 12F
構設計上的複雜性(php的array非常好用).另外,用php來
08/07 19:39, 12F

08/07 19:40, , 13F
跑當然沒問題,不過你應該用命令列模式來跑的才對,而
08/07 19:40, 13F

08/07 19:41, , 14F
非透過http.至於跑出來的資料把它丟進資料庫.要查詢
08/07 19:41, 14F

08/07 19:42, , 15F
及瀏覽才透過http呼叫負責處理的php程式.總之,就是分
08/07 19:42, 15F

08/07 19:43, , 16F
開來寫&分開作業:資料分析運算的 跟 資料查詢瀏覽的.
08/07 19:43, 16F

08/07 20:47, , 17F
試試看透過cli跑,然後每個pass跑完都存進文字檔?
08/07 20:47, 17F

08/08 00:31, , 18F
能用CLI跑的就用CLI 掛在HTTPD底下 有時候跟
08/08 00:31, 18F

08/08 00:31, , 19F
HTTPD共用資源的下場會很糟
08/08 00:31, 19F

08/09 23:31, , 20F
經過測試...用CLI結果也是一樣慘 囧
08/09 23:31, 20F

08/09 23:46, , 21F
這麼多candidates,那有沒有重複的運算是可以省的?
08/09 23:46, 21F
文章代碼(AID): #1AUwQVP5 (PHP)
文章代碼(AID): #1AUwQVP5 (PHP)