3
$fp_src=fopen('file','r');

$filter = stream_filter_prepend($fp_src, 'convert.iconv.ISO-8859-1/UTF-8');

while(fread($fp_src,4096)){
    ++$count;
    if($count%1000==0) print ftell($fp_src)."\n";
} 

これを実行すると、わずか 35MB のファイルを処理しただけで、スクリプトは最大 200 MB の RAM を消費してしまいます。

stream_filter なしで実行すると、約 10 MB の一定のメモリ フットプリントで圧縮されます。

何を与える?

4

3 に答える 3

1

カスタムフィルターを登録するだけです。iconv が組み込まれています。特定の操作ではありません。rot13 にストリーム フィルターを使用すると、同様の動作が発生します。

于 2008-10-27T23:32:12.657 に答える
0

私がここstream_filter_prepend()で読んでいることから、プロセスについて誤解している可能性がありますが、正しく実装していません。

また、完全にはわかりませんが、これはiconvが高価なプロセスであるという事実と関係があり、ストリームフィルターとして使用しているという事実とは関係がないと確信しています.

幸運を。

于 2008-10-27T23:22:21.850 に答える
0

stream_filter_prepend() を使用する特定の理由はありますか? それがメモリの問題を引き起こしている場合は、別の方法でそれを行う方法を見つけます。

于 2008-10-28T04:06:23.807 に答える