メモリ不足にならずに 3,000 万の文字列を操作するには?

Linda Hamilton
リリース: 2024-11-09 08:33:02
オリジナル
660 人が閲覧しました

How to Manipulate a 30 Million Character String Without Running Out of Memory?

3,000 万文字列の操作: メモリ割り当てエラーの回避

curl を使用してベンダーから CSV データ フィードを取得すると、次のような課題が発生します。このような大きなファイルサイズを操作する場合。区切り文字 (r と n など) で内容を分解する一般的なアプローチでは、サイズが膨大 (約 3,050 万文字) になるため、「メモリ不足」エラーが発生します。この記事では、この問題を解決するための代替ソリューションを検討します。

ファイル全体をメモリに保存することは現実的ではありませんが、1 つのオプションは、CURLOPT_FILE を使用してコンテンツをディスク上のファイルにリダイレクトすることです。ただし、このアプローチは物理ファイルの作成を必要とするため、目的のワークフローと一致しない可能性があります。

別の解決策は、CURLOPT_FILE を使用して実際のファイルの代わりにカスタム ストリーム ラッパーを定義して登録し、それを利用することです。 。このストリーム ラッパーは、データが到着したときにデータをチャンク単位で処理し、メモリ割り当ての問題を効率的に回避するように設計できます。

このアプローチを説明するために、streamWrapper クラスを拡張する MyStream クラスを作成してみましょう。 stream_write メソッドでは、explode 関数を利用して、受信データ チャンクから行を抽出できます。データは通常、より小さなチャンク (8192 バイトなど) で受信されるため、ファイル全体を一度に操作するのではなく、これらの小さな部分を操作できます。

このカスタム ストリーム ラッパーを独自のプロトコルで登録することで (例: "test")、curl 設定で CURLOPT_FILE とともに使用すると、stream_write メソッドを利用して、受信したデータを段階的に処理できます。この手法により、メモリ割り当てエラーを引き起こすことなく、大きな文字列を効率的に操作できます。

以上がメモリ不足にならずに 3,000 万の文字列を操作するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート