加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 来自太多捕获错误的糟糕表现?

发布时间:2020-12-15 23:55:11 所属栏目:百科 来源:网络整理
导读:我在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]); //
我在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;  }}

发生的事情是,如果传入的给定字段不是可以转换为十进制的字段,则会设置一个标志,然后在记录中进一步使用该标志以确定其他内容.

问题是,当我通过30k记录进行解析时,应用程序实际上会抛出数以万计的异常.整个过程花费了大约10分钟的时间来完成所有事情,我的总体任务是改善一些时间,如果这是一个糟糕的设计理念,这似乎很容易挂掉水果.

任何想法都会有所帮助(善良,这是一个悲惨的一天)

谢谢,
克里斯

解决方法

使用控制流的异常通常是一种不好的做法(正是因为你观察到的效率很低).您需要什么类型的数据才能转换为十进制?如果输入不是预期的格式,你可以使用TryParse方法或其他不抛出异常的方法吗?

如果您正在解析字符串,因为它通过返回false报告失败,Decimal.TryParse method应该可以解决问题:

decimal d;
if (Decimal.TryParse(str,out d)) 
  // Ok,use decimal 'd'
else 
  // Failed - do something else

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读