在.NET库(Deveel Math)中我实现了对大十进制数字的数学运算,对于一个特定的操作(x ^ 10),我安全地检查这是否会导致通过最大可寻址内存,通过检查当前Process
。
long byteArraySize = 1 + (long)(exp / 2.4082399653118496);
if (byteArraySize > System.Diagnostics.Process.GetCurrentProcess().PeakVirtualMemorySize64)
// power of ten too big
throw new ArithmeticException();
我试图将此库移植到PCL模型(可移植类库),但该配置文件不支持System.Diagnostics.Process
类,因此我无法确定峰值内存。
你知道其他选择吗?
更新
回应一条评论:我已经尝试应用一个捕获OutOfMemoryException
捕获解决方案的解决方案,但这种情况在执行过程中发生,只在计算几分钟后才终止进程。
更清楚的是,这个库是Google项目的直接端口,即使在原始代码中,也会应用此陷阱来防止此类情况。此外,此案例经过明确测试,以评估在流程继续之前抛出异常。