[英]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.