簡體   English   中英

PHP大數組操作

[英]PHP big array manipulation

在讀取整個數組中的整個文件(如十六進制)后,我在內存中存儲了一個很大的數組:

$bin_content = fread(fopen($filename,"r"),filesize($filename));
$hex_decode = explode(" ",chunk_split(bin2hex($bin_content),2," "));
unset($bin_content);

function myfunction($i) {
  global $hex_decode;
  // stuff here 
}

當我創建一個使用此$hex_decode數組作為全局函數的函數時,腳本運行得像永遠(非常慢),但是如果我調用該函數,則將$hex_decode作為參數傳遞( myfunction($i,$hex_decode) instead of myfunction($i) in which $i is a pointer ),則速度更快。

誰能解釋為什么? 還有什么方法可以通過以其他方法讀取文件來加快腳本速度。

我需要將整個文件放在該數組中,而不是逐行顯示,因為我正在構建自定義的ASN.1解碼器,所以我需要全部包含它。

還有什么方法可以通過以其他方法讀取文件來加快腳本速度。

我個人將使用流過濾器對讀取的文件進行塊讀取和轉換,而不是一次性讀取整個文件,然后使用內存中的整個文件進行轉換和修復,從而處理ASN的所有過濾和修復.1流過濾器內的結構。

我知道這不是對實際問題的直接回答,而是對上面的單引號。 但它可以提供較少的內存消耗替代方法。

StackOverflow已經有一個類似的問題,請看一下:

PHP中全局變量和函數參數之間的優缺點?

如果文件很大,則可以考慮采用內存保守的方法。 ASN.1通常以類型-長度-值的結構進行編碼,這意味着您不必將整個內容存儲在內存中,而只需要在任何給定時間處理所需的數據即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM