C# c语言中的虚拟内存地址管理#
我正在研究monte carol pricer,我需要提高发动机的效率C# c语言中的虚拟内存地址管理#,c#,memory-management,ironpython,C#,Memory Management,Ironpython,我正在研究monte carol pricer,我需要提高发动机的效率 MonteCarlo路径由第三方库(在c++中)创建 定价是在IronPython中完成的(由最终用户创建的脚本) 其他一切都是由c#应用程序驱动的 定价过程如下: C#应用程序请求路径并收集它们 C#应用程序将路径推送到脚本,脚本定价并返回值 C#应用程序向最终用户显示结果 收集的路径的数量和大小是预先知道的 我有两种解决方案,有一些优点和缺点: 请求路径生成,对于每个路径,要求脚本返回结果,并在处理完所有路径后最
- MonteCarlo路径由第三方库(在c++中)创建
- 定价是在IronPython中完成的(由最终用户创建的脚本)
- 其他一切都是由c#应用程序驱动的
- C#应用程序请求路径并收集它们
- C#应用程序将路径推送到脚本,脚本定价并返回值
- C#应用程序向最终用户显示结果
因此,本文通过以下两个问题进行总结:
关于问题2:您可以使用一个来确定一个对象在.NET中占用了多少内存,这是一项相当困难的任务。同一个问题我已经碰到好几次了。有一些不完善的方法,但没有一种是非常精确的 我的建议是估计一条路径需要多少,然后通过一堆路径,留下一个良好的安全余量。即使一次只处理10个,您也已经将开销减少了10倍 你甚至可以让保证金配置,然后调整它,直到你找到一个良好的平衡。一个更优雅的解决方案是在另一个进程中运行整个过程,如果遇到OutOfMemoryException,则使用较少的项重新开始计算(并相应地调整边距)。但是,如果您有太多的数据,以至于内存不足,那么在两个进程之间传递数据可能会有点慢(这也会复制数据)
内存溢出可能是由于路径处理器中的某些缺陷造成的吗?可能是内存泄漏?在C++和.NET中都是可能的。线程化?有什么理由不让一台64位计算机的内存超过4gb的最大容量?解决了这个问题,并提供了更好的可伸缩性。@Tomtom:不行,我无法控制目标环境。它可以是64位或32位,然后您还可以在其上设置LAA标志。给你3gb而不是2gb。@TomTom:这很好,但坦率地说,如果你去见IT基础架构的负责人,让他改变提供给用户的标准版本,我想他会嘲笑我,因为我说的其他流程解决方案不是一个选项。在另一个过程中找到平衡会变慢。通过外推路径数来找到正确的平衡是我所做的,但问题是路径对象的复杂性取决于用户请求(事先不知道),但在运行时知道到底什么是慢的部分?调用脚本的开销?或者脚本实际上能够并行处理多条路径吗?如果只是调用开销,那么您可以修改脚本容器,使其逐个处理路径,从而基本上减少到第一个选项(在您的问题中),而不需要多次调用的开销?开销是由c调用脚本(c调用IronPytoh)引起的,脚本按顺序处理路径,但问题是我需要调用它的时间。如果我将路径分组10以处理100000个路径,我将调用脚本10000如果我将路径分组100000,我将调用“脚本”(ironpython)一次,从而将开销减少10000。但不管你怎么帮我找到解决办法我在极端条件下做了测试,这是不现实的。有了现实价值,开销就不那么重要了。我将找到标准路径的最佳分组值,并根据用户请求的路径动态调整它