マルチギガバイトのテキストファイルを使用していて、PowerShellを使用してそれらのストリーム処理を実行したいと考えています。それは単純なもので、各行を解析してデータを取り出し、データベースに保存するだけです。
残念ながら、get-content | %{ whatever($_) }
パイプのこの段階で行のセット全体をメモリに保持しているようです。また、これは驚くほど遅く、実際にすべてを読み取るには非常に長い時間がかかります。
だから私の質問は2つの部分です:
- どのようにしてストリーム全体を1行ずつ処理し、全体をバッファリングしてメモリに保持しないようにできますか?この目的のために数ギガのRAMを使い切るのを避けたいと思います。
- どうすれば速く実行できますか?PowerShellの反復処理
get-content
は、C#スクリプトよりも100倍遅いようです。
私はここでやっている-LineBufferSize
何かパラメーターが欠けているような何かばかげていることを願っています...
get-content
上げるには、-ReadCountを512に設定します。この時点で、Foreachの$ _は文字列の配列になることに注意してください。