Anu*_*nup 3 c# model-view-controller performance
我正在总结该守则。以下代码在foreach循环中迭代了近 4000 次。在我的本地 IIS 上,它可以正常工作,但在生产云服务器上,整个应用程序崩溃了。
try
{
cell.Value = decimal.Parse(dr[dc.ColumnName].ToString());
}
catch
{
cell.Value = dr[dc.ColumnName];
}
Run Code Online (Sandbox Code Playgroud)
我的疑问是:- 如上所述使用 Catch 块会导致 CPU 使用率高吗?
作为附加信息:-
Catch已点击 4000 次
在代码中使用 try-catch 的性能成本很小,但在 IMO 中可以忽略不计:每个“try-that-didnt-catch”的性能成本在< 0.001 \xc2\xb5s范围内(使用 .NET 4.6.1 Release 版本)在我的 Core i7 x64 机器上)。
\n\n但如果它必须 catch ,那么它的成本确实要高得多:每个“try-that-had-to-catch”在12.5 \xc2\xb5s范围内(使用 .NET 4.6.1 Release 构建)我的酷睿 i7 机器)。不过,您可能不会注意到,直到您达到数十个数千个捕获异常的水平。
\n\n总而言之,如果可以的话,最好避免抛出和捕获,并且您可以在此处使用decimal.TryParse来做到这一点。
\n\n您现在必须单独进行空检查,否则.ToString()仍可能导致崩溃。
重写的代码:
\n\nvar v = dr[dc.ColumnName];\nvar s = v?.ToString(); // or you might use: var s = v as string;\nif (s != null && decimal.TryParse(s, out decimal d))\n cell.Value = d;\nelse\n cell.Value = v;\nRun Code Online (Sandbox Code Playgroud)\n