我正在总结守则。以下代码在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次
答案 0 :(得分:4)
在代码中出现尝试捕获 的代价是最小的,但IMO可以忽略不计:每'try-that-didnt-t'的 <0.001 µs 捕获”(使用在我的Core i7 x64计算机上构建的.NET 4.6.1版本)。
但是如果必须捕获,那么它的成本确实更高:每次捕获的尝试 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;