Chr*_*ein 3 c# error-handling performance
我在C#(.NET 2.0)中有一个大项目,它包含由SubSonic生成的非常大的代码块.像这样的尝试捕获导致可怕的性能打击?
for (int x = 0; x < identifiers.Count; x++)
{decimal target = 0;
try
{
target = Convert.ToDecimal(assets[x + identifiers.Count * 2]); // target %
}
catch { targetEmpty = true; }}
Run Code Online (Sandbox Code Playgroud)
发生的事情是,如果传入的给定字段不是可以转换为十进制的字段,则会设置一个标志,然后在记录中进一步使用该标志以确定其他内容.
问题是,当我通过30k记录进行解析时,应用程序实际上会抛出数以万计的异常.整个过程花了将近10分钟的时间来完成所有事情,我的总体任务是将时间改进一些,如果这是一个糟糕的设计理念,这似乎很容易挂起.
任何想法都会有所帮助(善良,这是一个悲惨的一天)
谢谢,克里斯
使用控制流的异常通常是一种不好的做法(正是因为你观察到的效率很低).您需要转换为哪种类型的数据decimal?TryParse如果输入不是预期的格式,你能使用方法或其他不抛出异常的方法吗?
Decimal.TryParse如果您正在解析字符串,因为它通过返回报告失败,那么方法应该可以解决问题false:
decimal d;
if (Decimal.TryParse(str, out d))
// Ok, use decimal 'd'
else
// Failed - do something else
Run Code Online (Sandbox Code Playgroud)
那是一段非常可怕的代码。一般来说,异常应该只用于捕获意外的结果。您收到大量异常的事实意味着这是一个应该成为内在逻辑一部分的常见情况。
decimal.TryParse在这里是一个更好的选择,我建议也缓存它的值identifiers.Count * 2(不确定编译器是否会优化它)
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |