[英]F# - Scope of variables
我有一个F#代码计算液体流量。 代码由2个项目组成。 运行模拟的核心库和项目。 当我运行参数研究时
open CoreLibrary
for lbmViscosity in [0.1] do
for Re in [0.001; 0.5] do
for lbmD in [6.;5.;4.;3.;2.5;2.;1.5;1.;0.8;0.6;0.4;0.2] do
simulation setup
let result = call CoreLibrary
save result to file
然后我得到了正确的结果。 当我运行代码时:
open CoreLibrary
for lbmViscosity in [0.1] do
for Re in [0.1; 0.001; 0.5] do
for lbmD in [6.;5.;4.;3.;2.5;2.;1.5;1.;0.8;0.6;0.4;0.2] do
simulation setup
let result = call CoreLibrary
save result to file
那么对于Re = 0.001,我得到了错误的结果。 我也尝试过Array.iter而不是for循环,结果相同。 当我编译我的代码并使用不同的输入参数将其作为exe运行时,它运行良好。
除了变异之外还有什么可能导致错误的结果吗? 可能是垃圾收集器的错吗? 是否有任何命令可以在某个地方彻底清理记忆? 就像是:
open CoreLibrary
for lbmViscosity in [0.1] do
for Re in [0.1; 0.001; 0.5] do
for lbmD in [6.;5.;4.;3.;2.5;2.;1.5;1.;0.8;0.6;0.4;0.2] do
clean everything
simulation setup
let result = call CoreLibrary
save result to file
我只在核心库中而不是在for循环中改变值。 因此,我希望只要for循环进入下一个循环,或者一旦Array.iter结束,内部的所有内容都将被删除。
谢谢你的帮助,提示等:)
所以我发现了什么错 - Massif是对的! :)在coreLibrary中,我们使用ConcurrentDictionary。 我们想使用Records而不是Classes(功能:D)并且记录不允许在类内部创建字典,因此字典已经在类之外创建并通过成员函数链接到记录中。 因此,一旦dll被加载,字典就被创建并永远保持活着......现在我们将记录改为了类,一切正常。 非常感谢您的提示
所以我发现了什么错 - Massif是对的! :)在coreLibrary中,我们使用ConcurrentDictionary。 我们想使用Records而不是Classes(功能:D)并且记录不允许在类内部创建字典,因此字典已经在类之外创建并通过成员函数链接到记录中。 因此,一旦dll被加载,字典就被创建并永远保持活着......现在我们将记录改为了类,一切正常。 非常感谢您的提示
您使用哪些数据类型? 您使用的浮点类型是否可能引入表示错误? 什么构成“正确”和“不正确”输出?
作为一般规则,打开或不打开库不会对计算结果产生任何影响(假设代码仍然编译!)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.