我正在制作monte carol pricer,我需要提高发动机的效率。
定价过程如下:
预先知道所收集路径的数量和大小。
我有两个有一些优点和缺点的解决方案:
第一个解决方案在所有情况下都能正常工作,但是随着请求的路径数量增加,性能下降(我认为这是由于多次调用ironpython)
如果请求的路径数太大,第二种解决方案会更快,但可能遇到“内存不足”异常(我认为虚拟内存寻址空间不够)
我选择中间地带并处理一堆路径然后汇总价格。 我现在想要的是通过提前知道我可以处理“内存不足”异常可以处理的路径来进一步提高性能
我做了数学计算,事先知道给定请求的路径大小(在内存中)。但是因为我很确定这不是内存问题,而是更多虚拟内存寻址问题
因此,所有这些文本都通过以下两个问题进行总结:
btw我正在使用32位计算机
提前感谢您的帮助
答案 0 :(得分:1)
关于问题1:How much memory does a C#/.NET object use?
关于问题2:您可以使用memory performance counter
答案 1 :(得分:1)
找出一个对象在.NET中占用多少内存是一项非常困难的任务。我几次遇到同样的问题。有一些不完美的方法,但没有一个是非常精确的。
我的建议是估计路径需要多少,然后通过一堆路径,留下一个很好的安全边际。即使你一次只处理10个,你已经将开销减少了10倍。
您甚至可以设置边距可配置,然后进行调整,直到达到良好的平衡。一个更优雅的解决方案是在另一个进程中运行整个事情,如果它遇到OutOfMemoryException,用较少的项重新开始计算(并相应地调整边距)。但是,如果您有太多数据而内存耗尽,那么将它传递到两个进程(这也会复制数据)可能会有点慢。
内存溢出可能是因为路径处理器存在一些不完善之处吗?内存泄漏可能?这些都可以在C ++和.NET中使用。