【发布时间】:2012-08-20 20:21:14
【问题描述】:
(我搜索了类似的主题,但找不到任何解决此特定问题的内容,尽管有几个类似的主题,例如 here 和 here。)
我正在评估我们的应用程序的性能,我注意到我们收到了一些 IOExceptions“无法找到资源”。我不确定它到底发生了多少次(很大程度上取决于用户如何使用该应用程序),但至少有十几个左右。
我假设异常通常会带来性能开销,就像File.Exists() 这样的文件 I/O 调用也是如此。我知道在尝试加载文件之前检查文件是否存在总是一个好习惯。我的问题是,如果我检查这个特定文件是否存在,我会看到多少性能提升? (同样,忽略“无论如何你都应该这样做”,我只是想了解性能)。
选项 1:
try
{
return (ResourceDictionary) Application.LoadComponent(uri);
}
catch (Exception)
{
//If it's not there, don't do anything
}
这不会进行额外的 IO 调用,但有时会抛出并吞下异常。
选项 2:
if(File.Exists(uri))
{
return (ResourceDictionary) Application.LoadComponent(uri);
}
【问题讨论】:
-
你怎么知道它“总是一个好的做法”?
-
选项二引入了竞争条件。
-
选项 2 有竞争条件。任何 IO 操作都可能会失败,即使您之前已经检查过了。
-
你是对的,它可能并不总是这样,但一般来说你总是想检查文件是否存在。几项大学作业因未检查而被扣分;)
-
这就是你所说的外生异常。 blogs.msdn.com/b/ericlippert/archive/2008/09/10/…
标签: c# wpf performance file-io exception-handling