我正在总结守则。以下代码在一个foreach
循环中迭代了将近4000次。在我的本地IIS上,它正在运行,但是在Production Cloud Server上,整个应用程序崩溃了。
try
{
cell.Value = decimal.Parse(dr[dc.ColumnName].ToString());
}
catch
{
cell.Value = dr[dc.ColumnName];
}
我的查询是:-使用上面的Catch块会导致CPU使用率过高吗?
作为补充信息:-Catch
达到4000次
在代码中包含try-catch可以将IMO的性能损失降到最低,但可以忽略不计:每次“ try-that-didnt-catch”(使用在我的Core i7 x64上构建的.NET 4.6.1 Release)在0.001 µs范围内机)。
但是,如果必须捕获,那么它的成本确实要高得多:每个“必须捕获的尝试”在12.5 µs的范围内(使用在我的Core i7机器上构建的.NET 4.6.1 Release) 。直到达到成千上万个捕获的异常级别,您仍然可能不会注意到。
总而言之,如果可能的话,最好避免抛出和捕捉,并且可以通过使用decimal.TryParse做到这一点。
现在,您必须单独进行null检查,否则.ToString()
可能仍然会使它崩溃。
重写代码:
var v = dr[dc.ColumnName];
var s = v?.ToString(); // or you might use: var s = v as string;
if (s != null && decimal.TryParse(s, out decimal d))
cell.Value = d;
else
cell.Value = v;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句