我正在开发一个蒙特卡罗定价器,需要提高引擎的效率。
蒙特卡罗路径由第三方库(使用c++)创建。
定价是在IronPython中完成的(由最终用户创建的脚本)。
其他所有内容都由C#应用程序驱动。
定价过程如下:
C#应用程序请求路径并收集它们。
C#应用程序将路径推送到脚本中,脚本对其进行定价并返回值。
C#应用程序向最终用户显示结果。
收集路径的数量和大小事先已知。
我有两种解决方案,各有优点和缺点:
请求路径生成,对于每条路径,要求脚本返回结果,最后在处理完所有路径后聚合结果。
请求路径生成,收集所有路径,一次请求脚本处理所有路径,并返回最终价格。
第一种解决方案在所有情况下都很好,但随着请求的路径数量增加,性能会降低(我认为这是由于多次调用IronPython引起的)。
第二种解决方案更快,但如果请求的路径数太大,则可能会出现“内存不足”异常(我认为这不是足够的虚拟内存寻址空间)。
我选择了折中的方法,并处理一堆路径,然后聚合价格。现在我想通过事先知道可以处理多少路径而进一步提高性能,而不会触发“内存不足”异常。
我做了数学计算,并预先知道给定请求的路径大小(在内存中)。但是,由于我相当确定这不是内存问题,而更多地是虚拟内存寻址问题。
所以所有这些文本由以下两个问题总结:
1.是否有可能事先知道我的进程需要多少虚拟内存地址来存储n个类实例(已知内存大小和结构)?
2.是否有可能知道我的进程还有多少虚拟内存地址可用?
顺便说一句,我正在32位计算机上工作。
感谢您的帮助。
蒙特卡罗路径由第三方库(使用c++)创建。
定价是在IronPython中完成的(由最终用户创建的脚本)。
其他所有内容都由C#应用程序驱动。
定价过程如下:
C#应用程序请求路径并收集它们。
C#应用程序将路径推送到脚本中,脚本对其进行定价并返回值。
C#应用程序向最终用户显示结果。
收集路径的数量和大小事先已知。
我有两种解决方案,各有优点和缺点:
请求路径生成,对于每条路径,要求脚本返回结果,最后在处理完所有路径后聚合结果。
请求路径生成,收集所有路径,一次请求脚本处理所有路径,并返回最终价格。
第一种解决方案在所有情况下都很好,但随着请求的路径数量增加,性能会降低(我认为这是由于多次调用IronPython引起的)。
第二种解决方案更快,但如果请求的路径数太大,则可能会出现“内存不足”异常(我认为这不是足够的虚拟内存寻址空间)。
我选择了折中的方法,并处理一堆路径,然后聚合价格。现在我想通过事先知道可以处理多少路径而进一步提高性能,而不会触发“内存不足”异常。
我做了数学计算,并预先知道给定请求的路径大小(在内存中)。但是,由于我相当确定这不是内存问题,而更多地是虚拟内存寻址问题。
所以所有这些文本由以下两个问题总结:
1.是否有可能事先知道我的进程需要多少虚拟内存地址来存储n个类实例(已知内存大小和结构)?
2.是否有可能知道我的进程还有多少虚拟内存地址可用?
顺便说一句,我正在32位计算机上工作。
感谢您的帮助。