Sko*_*der 22 c# performance exception try-catch
嘿大家,关于try..catch块的快速问题.我听说它们使用起来很昂贵,不应该用作程序流程的一部分.但是,为了验证电子邮件地址,我使用以下代码.
try
{
MailAddress checkEmail = new MailAddress(testEmail);
return true;
}
catch
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
由于事先验证,我没有很多例外被捕获,除非它试图绕过验证.我的问题是,尝试...如果捕获到异常,Catch块只是昂贵的,或者无论是否抛出任何异常,它总是很昂贵?
谢谢
编辑:感谢所有的回复.我已经决定,因为检查(在C#中)不是很昂贵,我会坚持使用这种方法.这主要是因为抛出的实际异常是罕见的,因为先前的验证步骤确保没有人意外地输入无效的电子邮件地址.
T.J*_*der 20
在一般的,在今天的实现,进入一个try块是不是在所有昂贵(这并不总是如此).但是,抛出和处理异常通常是相对昂贵的操作.因此,异常通常应用于异常事件,而不是正常的流量控制.
但是,性能只是需要考虑的一个因素,特别是在现代世界中.如果(例如)你正在做一次响应用户操作的事情,那么从性能角度来看,即使你做了主动检查,你是否使用异常也是无关紧要的,只要异常发生得足够快用户不是jolted.¹但是如果你在一个紧凑的循环中做一些事情会运行数十万次,或者你正在编写一个可能需要处理巨大负载的web应用程序,你可能我想避免在正常情况下使用例外.
¹十多年前,我负责增强.Net 1.1"无触摸部署"应用程序,其中第一次抛出异常需要三秒钟.在一个用例中涉及打开文件时,这是一个足够的问题,用户要求的文件可能合理地不存在,我必须在尝试打开文件之前添加对文件存在的检查,这通常是糟糕的编程习惯(只是尝试打开文件并处理异常(如果失败),纯粹是因为等待该异常构建的用户体验非常糟糕.但那可能不是我们现在生活的世界.