我在捉對長期乳寧服務的一些內存泄漏(使用F#)現在。 迄今爲止我見過的唯一的「奇怪」的事情是這樣的:Microsoft.FSharp.Control.Mailbox中的內存泄漏?
- 我在一個子系統使用MailboxProcessor用代數據類型命名QueueChannelCommands(或多或少一堆添加/ Get命令 - 一些附帶AsyncReplyChannels)
- 當我配置文件中的服務(使用螞蟻內存分析器),我看到上述類型的數組的情況下(最有lenght 4,但越來越多) - 所有空(NULL),其引用似乎被控制舉行。郵箱:
我看不到任何reas在我對這種行爲的代碼(你的標準代碼,你可以在每一個郵箱,例如找出存在 - 只是一個let! = receive
和match
環路遵循一個return! loop()
結束前或有沒有人見過這種行爲甚至知道如何處理這個? 或者這甚至是(已知的)錯誤?
更新:數組的成長真的很奇怪 - 好像有沒有beeing正確使用附加額外的空間:
數組似乎是MailboxProcessor的內部「mailbox.arrivals」如果這是任何幫助 – Carsten 2012-02-20 06:05:23
戴夫·托馬斯發現了類似的行爲時,他用'回報! loop()'在try/catch塊中:http://moiraesoftware.com/blog/2011/12/11/fixing-a-hole/。我不認爲你的程序就是這種情況。 – pad 2012-02-20 07:15:42
是的,謝謝 - 我意識到這個問題,但這導致了更多的開銷(他發現了很多異步的東西),類似於什麼時候做的!而不是回報!被使用 - 在這裏我只看到越來越多的空陣列,沒有任何異步問題。 – Carsten 2012-02-20 07:41:10