.NET执行检查算法的最快方法

时间:2019-01-29 18:49:22

标签: c# .net

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

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

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

在溢出时具有默认值的情况下,执行检查算术的最快/最便宜的方法是什么?

1 个答案:

答案 0 :(得分:5)

如果值大于int的最大值,则强制转换为int。您可以添加检查以查看该值是否大于int.MaxValue。如果您期望负值,还应该对照int.MinValue进行检查。

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

.net fiddle