2013-03-04 9 views
0

我有一個需要由PHP解釋的緩衝區,但是隨後在緩衝區中使用許多substr被證明是非常慢並且密集CPU,可能是因爲substr創建了一個子字符串的新副本。PHP字符串偏移?做很多substr時使用像緩衝區這樣的變量太慢了?

我需要通過在緩衝區中向前移動:

由X的偏移量(字節數可變)移動。 或 從頭開始刪除X字節

PHP中是否有任何容器可以讓我做這樣的事情?

爲例(僞)

while(!done) 
{ 
    $itemSize = unpack(?, $buffer); 
    $item = substr($buffer, $itemSize); 
    $done = doSomething($item); 
    $buffer = $item; 
} 

謝謝

+0

'while(!done)'給出語法錯誤。 – Shoe 2013-03-04 19:39:00

+0

@Jeffery - 和'解壓縮(?'也是無效的,我很確定它只是僞代碼 – 2013-03-04 19:40:16

+0

是的,這是正確的,我應該指定這只是一個僞代碼示例 – 2013-03-04 21:12:19

回答

0

字節級工作真的不是什麼PHP是創建。 PHP如何管理內存比您想象的要複雜得多。它適用於大量的參考文獻,即使您不使用&也只能生成很少的副本。

我非常懷疑做了很多substr的緩慢,我非常懷疑用PHP在字節級別管理內存會有什麼幫助。

+0

我們在代碼上運行了一個profiler,它確實是substr,速度很慢,這裏是其他人有類似的問題:http://codereview.stackexchange.com /問題/ 7220/PHP-SUBSTR慢 – 2013-03-04 19:59:54

相關問題