我在捉对长期乳宁服务的一些内存泄漏(使用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