c# - .NET 进行检查算术的最快方法
问题描述
我的应用程序的关键路径中有这段代码
try
{
checked
{
values[i] = (int)(sample[i].Value * (double)magnitude));
}
} catch (OverflowException)
{
values[i] = int.MaxValue;
}
但是,一旦幅度变得足够高(大约 1.8 ish),这部分就会开始疯狂地抛出 OverflowExceptions 并显着降低我的应用程序的速度。将此块更改为未选中可以解决此问题,因此我知道这是问题所在。
如果溢出,您有默认值的检查算术的最快/最便宜的方法是什么?
解决方案
int
如果值大于 int 的最大值,则在强制转换为时发生异常。您可以添加一个检查以查看该值是否大于int.MaxValue
。如果您期望一个负值,您还应该检查int.MinValue
.
var result = (sample[i].Value * (double)magnitude);
values[i] = result > int.MaxValue ? int.MaxValue : (int)result;
推荐阅读
- html - Django分页计数不断增加
- r - r regex 删除括号前后的所有字符
- mysql - Partitioning by range columns unexpected behavior
- haskell - 如何使此代码与 Integer-> Int 类型签名一起使用?
- javascript - reactJs同时使用onMouseDown和onMouseMove在按住鼠标按钮的同时选择多个元素?
- php - 使用表查询和选择函数以检测不同列的时间戳并使用 json 发送
- python - 基于 pandas DataFrame Key Column 的动态文件名
- arrays - 以特定大小拆分数组
- c - 如何在c中打印libpari版本?
- ios - 如何在swiftUI中将图像设置为全屏?