Microsoft.FSharp.Control.Mailbox中的内存泄漏?

时间:2012-02-20 06:02:38

标签: memory-leaks f# mailboxprocessor

我正在寻找长期服务中的一些内存泄漏(使用F#)。 到目前为止,我见过的唯一“奇怪”的事情如下:

  • 我在一个子系统中使用一个名为QueueChannelCommands的代数数据类型的子邮箱处理器(或多或少的一些Add / Get命令 - 一些附加了AsyncReplyChannels)
  • 当我分析服务(使用Ants Memory Profiler)时,我看到了所提及类型的数组的实例(大多数都有长度为4,但正在增长) - 所有为空(null),其引用似乎由Control.Mailbox持有: enter image description here

我在代码中看不到任何这种行为的原因(您可以在每个邮箱示例中找到标准代码 - 只有一个包含let! = receivematch的循环结束于一个return! loop()

有没有人见过这种行为,甚至知道如何处理这种行为? 或者这甚至是一个(已知的)错误?

更新:数组的增长真的很奇怪 - 似乎附加了额外的空间而没有正确使用: enter image description here

2 个答案:

答案 0 :(得分:2)

我不是任何方式的F#专家,但也许你可以看看这个帖子中的第一个答案:

Does Async.StartChild have a memory leak?

第一个回复在下一页提到了内存分析教程:

但是他们提到了F#的开源版本

我不确定它是你在寻找什么(关于F#的这个开源版本在最后一点),但也许它可以帮助你找到泄漏的来源或证明它实际上泄漏了内存

希望有所帮助?

答案 1 :(得分:-5)

.NET有自己的垃圾收集器,它运行得非常好。 在.NET技术中导致内存泄漏的最常见方法是设置委托,而不是在对象解构器上删除它们。