2

より多くのバイナリ ファイルの処理に問題があります。私は多くのフォルダーを持っており、それぞれに約 200 個の bin ファイルがあります。

これらのディレクトリのうち 2 つを選択し、これら 2 つのディレクトリのすべての bin ファイル (それらのパス) をリストに保存し、このリストを使用してフィルタリングを行います。この最後に、約 200 個の bin ファイルがリストに表示されます。

次に、フィルター処理されたすべてのファイルを反復処理し、それぞれから最初の 4x8 バイトを読み取ります (FileStreamまたはを試しBinaryReaderました)。このすべての操作には約 2 ~ 6 秒かかりますが、初回のみです。次回は十分に速いです。長時間(約 30 分)ファイルに何も起こらないと、問題が再び発生します。

それで、おそらくそれはキャッシングに関するものですか、それとも何ですか?

誰か助けてくれませんか?ありがとう

4

2 に答える 2

0

1つの可能性は、ドライブがスリープ状態になることです(通常、ドライブは15〜30分後に電源が切れるように構成されます)。ハードドライブが元の速度に戻るため、これにより大幅な遅延が発生する可能性があります(5秒が一般的な数値です)。

幸いなことに、これは簡単にテストできます。パワーダウン時間をたとえば6時間に設定してから、動作が変化したかどうかをテストします。

于 2013-02-19T16:32:07.430 に答える
0

ファイルへのハンドルが破棄される可能性が非常に高いため、しばらくするとGCがそれらを削除し、ファイルがOSによってRAMにロードされてそこから提供されるまでに時間がかかるか、単純に時間がかかります。より高速ですが、それは問題ではありません。プロセスは遅いため実行が遅くなります。それに依存してはならないため、2回目に高速であることは関係ありません。

私が提案するのは、これらのファイルの処理を可能な限り並列化して、手元のハードウェアの能力を最大限に活用できるようにすることです。

ファイルを処理するコードを分離することから始めて、そのコードを 内で実行し、それParallel.ForEachが役立つかどうかを確認します。

于 2013-02-19T15:43:52.990 に答える