相关疑难解决方法(0)

.NET异常有多慢?

我不想讨论何时抛出异常而不抛出异常.我想解决一个简单的问题.99%的时间不抛出异常的论点围绕着它们缓慢而另一方声称(基准测试)速度不是问题.我读过很多关于一方或另一方的博客,文章和帖子.那是哪个呢?

答案中的一些链接:Skeet,Mariani,Brumme.

.net c# performance exception

143
推荐指数
4
解决办法
3万
查看次数

为什么尝试块很贵?

我听说过你应该避免尝试使用catch块的建议,因为它们很贵.

我的问题是关于.NET平台:为什么尝试块很昂贵?

回复摘要:

在这个问题上显然有两个阵营:那些说试试块是昂贵的,那些说"可能只是一点点".

那些说try块很贵的人通常会提到解除调用堆栈的"高成本".就个人而言,我不相信该辩解-阅读有关的异常处理程序如何存储后,专门在这里.

Jon Skeet坐在"可能只是一点点"的阵营中,写了两篇关于异常和性能的文章,你可以在这里找到.

有一篇文章我觉得非常有趣:它谈到了try块的"其他"性能影响(不一定是内存或cpu消耗).Peter Ritchie提到他发现try块中的代码没有被优化,因为它本来是编译器的.你可以在这里阅读他的发现.

最后,有一篇博客文章介绍了在CLR中实现异常的人的问题.在这里看一下Chris Brumme的文章.

.net coding-style

51
推荐指数
4
解决办法
9607
查看次数

有没有更快的方法来检查这是否是一个有效的日期?

有没有更快的方法来简单地捕获如下的异常?

try
{
    date = new DateTime(model_.Date.Year, model_.Date.Month, (7 * multiplier) + (7 - dow) + 2);
}
catch (Exception)
{
    // This is an invalid date
}
Run Code Online (Sandbox Code Playgroud)

c# performance datetime

11
推荐指数
3
解决办法
5673
查看次数

来自太多错误的错误表现?

我在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分钟的时间来完成所有事情,我的总体任务是将时间改进一些,如果这是一个糟糕的设计理念,这似乎很容易挂起.

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

谢谢,克里斯

c# error-handling performance

3
推荐指数
2
解决办法
161
查看次数