たくさんのファイルを解析する必要があります。だから今、私はコンテンツを読み取り解析し、別の場所に出力を書き込むためにファイルを開きます。それは基本的に私がする必要があることですが、私は14000ファイルを解析しているので、プロセスをスピードアップしたいと思います。
作業を複数のスレッドに分割することで、アルゴリズムを改善しました。したがって、1つのスレッドにファイルの25%を実行させ、次の25%を実行させました。
とにかく、次のような場合は、パフォーマンスと速度が劇的に向上すると思います。
Task 1
ファイルを読み取り、ファイルの内容をBlockingCollection1
(メモリ)に配置しますTask 2
BlockingCollection1
のコンテンツを解析し、解析されたデータを配置するための複数のスレッドを作成しますBlockingCollection2
Task 3
コンテンツをディスクから読み取りBlockingCollection2
、ディスクに書き込みます。
私が今抱えている問題は、メモリ不足の例外が発生することです。使用されている場合は、ガベージコレクターにBlockingCollection1からアイテムを削除させたいと思います。BlockingCollection2
また、ディスクに書き込まれているアイテムを削除したいと思います。
BlockingCollection<T>
1つのスレッドがそのコレクションにアイテムを追加し、別のスレッドがそれらのアイテムを処理できるため、使用すると非常に便利です。リンクリストを使用する前に、この質問に傾倒しました:https ://stackoverflow.com/a/12519345/637142BlockingCollectionがどのようにエッセイと有用であるか。 とにかく、どうすればこの問題を解決できますか?スタックなど、別の種類のコレクションを使用する必要がありますか?