4

次のような画像をロードするコードがあります。

 using (var sourceImage = Image.FromFile(fullImagePath))
 {
    return new Bitmap(sourceImage);
 }

時折、画像の名前が間違っていたり、予期した場所になかったりして、 aSystem.IO.FileNotFoundExceptionが正しくスローされることがあります。ただし、この例外がスローされるまでに約 1 秒かかることがよくあります。私のコードが数百の画像を取得し、そのうちのいくつかが欠落している場合、これによりプロセスにかなりの時間が追加されます。

例外をスローする必要がある場合、例外を高速化する方法はありますか?

私が考えることができる唯一の代替手段は、最初に画像が存在するかどうかを確認することですが、それはすべての画像フェッチに数十ミリ秒を追加しますが、これも正確な解決策ではありません.

明確化: 内容の例fullImagePathは次のとおりです。

\\ImageSrv\secure\sites\2756\27074\760789\bthumb\1287.jpg

同じディレクトリに数百の他の画像がある場合があります。

結論: ファイルの存在を確認するのが最善の方法のようです。

4

2 に答える 2

2
  1. 自分で例外を防ぎます。Image.FromFile を失敗させ、例外 shennnigans を通過させる代わりに、ファイルが存在するかどうかを確認します。
  2. キャッシュをメモリに保持して、追加のハード ドライブ呼び出しの必要性をなくします
  3. 必要に応じて、FileSystemWatcher を使用してキャッシュを更新します
于 2013-01-11T16:34:35.817 に答える
0

別のスレッドを介して定期的に更新するファイル名のキャッシュを保持できます。次に、それをチェックして、ファイルが存在するかどうかをすぐに知ることができます (File.Exists のオーバーヘッドをバイパスします)。

もちろん、ディレクトリ内のファイルが常に追加/削除されている場合、これは機能しません。

于 2013-01-11T15:55:33.457 に答える