[英]C# Cast Exception
偶然发现了一些旧的代码,它们抛出并清空了一些强制转换异常(每次约20次:()
如果由于这个原因,性能受到影响该怎么办? 我应该担心这个,还是只是在try / catch中的开销
令人惊讶的是,缺少有关C#异常性能主题的信息。
谢谢,真的,来自你的。
例外情况会比大多数平均代码行减慢速度。 而不是强制转换然后捕获异常,而是进行检查。 例如
坏
myType foo = (myType)obj;
foo.ExecuteOperation();
好
myType foo = obj as myType;
if (foo != null)
{
foo.ExecuteOperation();
}
这有两个原因。
如果他们只是try { } finally { }
组,那么一切都很好 - 那里没有开销。 但是, try { } catch { }
既有潜在危险又可能很慢。
至于文档,这是非常好的: http : //www.codeproject.com/KB/architecture/exceptionbestpractices.aspx#Don%27tuseexceptionhandlingasmeansofreturninginformationfromamethod18
编辑:刚刚意识到你说空捕捉异常,没有捕捉空异常。 无论哪种方式,除非您正在处理IO,否则您可能希望避免为了性能而这样做。
例外是昂贵的,性能方面的。 上次我测量这些时,它们需要大约一整毫秒才能抛出并捕获每个异常。
避免使用异常作为流量控制机制。
正如其他人所提到的,抛出时例外是昂贵的。 在某些情况下,他们无法避免。
但在这种情况下,听起来确实如此。
我建议在演员表之前使用as
关键字。 这将告诉你演员是否成功,从而完全避免了Exception:
object someObject;
SomeType typedObject;
// fill someObject
typedObject = someObject as SomeType;
if(typedObject == null)
{
// Cast failed
}
如果您没有遇到任何性能问题,这是您必须执行该算法的唯一方法,请继续使用此方法。
也许在尝试演员之前你可以看到一些if
条款,如果你可以做演员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.