10

あなたが興味を持っている場合に備えて、SOでも非常によく似た質問がここで尋ねられましたが、その質問の受け入れられた答えが常に当てはまるとは限りません(私のアプリケーションの使用パターンには決して当てはまりません)。

パフォーマンスを決定するコードは、FileStream コンストラクター (ファイルを開くため) と SHA1 ハッシュ (.Net フレームワークの実装) で構成されます。コードは、上でリンクした質問で尋ねられたもののほとんどの C# バージョンです。

ケース 1:アプリケーションが初めてまたは N 回目に開始されましたが、ターゲット ファイル セットが異なります。アプリケーションは、以前にアクセスされたことのないファイルのハッシュ値を計算するように指示されました。

  • ~50ms
  • 80% FileStream コンストラクター
  • 18% ハッシュ計算

ケース 2:アプリケーションは完全に終了し、再び開始され、同じファイルのハッシュを計算するように求められます。

  • ~8ms
  • 90% のハッシュ計算
  • 8% FileStream コンストラクター

問題
私のアプリケーションは常にケース 1を使用しています。一度アクセスしたファイルのハッシュを再計算するように求められることはありません。

したがって、私のレート決定ステップは FileStream コンストラクターです! このユースケースをスピードアップするためにできることはありますか?

ありがとうございました。

PS 統計は、JetBrains プロファイラーを使用して収集されました。

4

5 に答える 5

1

ファイルシステムやディスクコントローラは、最近アクセスしたファイル/セクターをキャッシュします。

レートを決定するステップは、FileStreamオブジェクトを構築するのではなく、ファイルを読み取ることです。データがキャッシュにある場合、2回目の実行で大幅に高速化されるのは完全に正常です。

于 2009-11-02T20:40:33.967 に答える
-1

ネイティブを使用するようにしてください。ハンドルを取得して渡すにFILE_FLAG_SEQUENTIAL_SCANは、pinvoke する必要があります。CreateFileFileStream

于 2009-11-02T21:02:59.470 に答える