FileNotFoundException需要花费太长时间才能抛出,有没有办法缩短超时?

时间:2013-01-11 15:50:55

标签: c# exception-handling

我有一些代码可以加载这样的图像:

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

有时,图像将被错误命名或不在预期位置,并且正确抛出System.IO.FileNotFoundException。但是,抛出此异常通常需要大约1秒。当我的代码抓取几百张图片并且其中几张丢失时,这会给这个过程增加一大块时间。

如果需要抛出异常,有没有办法加速异常?

我能想到的唯一选择是检查图像是否先存在,但是每增加一次图像就会增加几十毫秒,这也不是一个好的解决方案。

澄清fullImagePath包含的示例是:

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

同一目录中可能还有数百个其他图像。

结论:看起来检查文件存在是最好的方法。

2 个答案:

答案 0 :(得分:2)

  1. 自己预防例外。检查文件是否存在,而不是让Image.FromFile失败并通过异常shenennigans
  2. 将缓存保留在内存中以消除额外硬盘驱动器调用的必要性
  3. 如果情况需要,请使用FileSystemWatcher
  4. 更新缓存

答案 1 :(得分:0)

您可以保留通过其他线程定期更新的文件名缓存。然后您可以检查并立即知道文件是否存在(绕过File.Exists的开销)

当然,如果不断添加/删除目录中的文件,这将无效。