4

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

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

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

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

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

澄清:包含的一个例子fullImagePath是:

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

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

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

4

2 回答 2

2
  1. 自己防止异常。检查文件是否存在而不是让 Image.FromFile 失败并通过异常 shennigans
  2. 将缓存保留在内存中,以消除对额外硬盘驱动器调用的必要性
  3. 如果情况需要,使用 FileSystemWatcher 更新缓存
于 2013-01-11T16:34:35.817 回答
0

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

当然,如果目录中的文件不断被添加/删除,这将不起作用。

于 2013-01-11T15:55:33.457 回答