首页 > 解决方案 > .NET 进行检查算术的最快方法

问题描述

我的应用程序的关键路径中有这段代码

try
{
    checked
    {
        values[i] = (int)(sample[i].Value * (double)magnitude));
    }
} catch (OverflowException)
{
    values[i] = int.MaxValue;
}

但是,一旦幅度变得足够高(大约 1.8 ish),这部分就会开始疯狂地抛出 OverflowExceptions 并显着降低我的应用程序的速度。将此块更改为未选中可以解决此问题,因此我知道这是问题所在。

如果溢出,您有默认值的检查算术的最快/最便宜的方法是什么?

标签: c#.net

解决方案


int如果值大于 int 的最大值,则在强制转换为时发生异常。您可以添加一个检查以查看该值是否大于int.MaxValue。如果您期望一个负值,您还应该检查int.MinValue.

var result = (sample[i].Value * (double)magnitude);
values[i] = result > int.MaxValue ? int.MaxValue : (int)result;

.net 小提琴


推荐阅读