我在应用程序的关键路径中有这段代码
try
{
checked
{
values[i] = (int)(sample[i].Value * (double)magnitude));
}
} catch (OverflowException)
{
values[i] = int.MaxValue;
}
但是,一旦幅度足够高(大约1.8 ish),此部分就会开始抛出OverflowExceptions异常,并显着降低我的应用程序速度。将此块更改为未经检查可以解决问题,所以我知道这是问题所在。
在溢出时具有默认值的情况下,执行检查算术的最快/最便宜的方法是什么?
答案 0 :(得分:5)
如果值大于int的最大值,则强制转换为int
。您可以添加检查以查看该值是否大于int.MaxValue
。如果您期望负值,还应该对照int.MinValue
进行检查。
var result = (sample[i].Value * (double)magnitude);
values[i] = result > int.MaxValue ? int.MaxValue : (int)result;