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

Memory leaks Microsoft.FSharp.Control.Mailbox中的内存泄漏?,memory-leaks,f#,mailboxprocessor,Memory Leaks,F#,Mailboxprocessor,我现在正在寻找一个长期运行的服务(使用F#)中的一些内存泄漏。 到目前为止,我看到的唯一“奇怪”的事情是: 我在一个子系统中使用一个名为QueueChannelCommands的代数数据类型的MailboxProcessor(或多或少是一组Add/Get命令,有些命令附加了AsyncReplyChannel) 当我分析服务时(使用Ants Memory Profiler),我会看到所述类型的数组实例(大多数数组的长度为4,但不断增长)-所有的数组都为空(null),其引用似乎由控件持有。邮箱:

我现在正在寻找一个长期运行的服务(使用F#)中的一些内存泄漏。 到目前为止,我看到的唯一“奇怪”的事情是:

  • 我在一个子系统中使用一个名为QueueChannelCommands的代数数据类型的MailboxProcessor(或多或少是一组Add/Get命令,有些命令附加了AsyncReplyChannel)
  • 当我分析服务时(使用Ants Memory Profiler),我会看到所述类型的数组实例(大多数数组的长度为4,但不断增长)-所有的数组都为空(null),其引用似乎由控件持有。邮箱:
我在我的代码中找不到这种行为的任何原因(你可以在每个邮箱示例中找到你的标准代码-只有一个循环,带有
let!=receive
和一个
match
return!loop()结束

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

更新:数组的增长真的很奇怪-似乎在没有正确使用的情况下添加了额外的空间:
.NET有自己的垃圾收集器,它工作得很好。 在.NET技术中,最常见的导致内存泄漏的方法是设置代理,而不是在对象解构器上删除它们。

我无论如何都不是F#专家,但也许你可以在这个线程中看到第一个答案:

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

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

我不确定这是否是您想要的(关于最后一点中的F#的开源版本),但也许它可以帮助您找到泄漏的来源,或者证明它实际上正在泄漏内存

希望这能有所帮助,也许吧


Tony

数组似乎是MailboxProcessor的内部“mailbox.arrivals”,如果这有什么帮助的话Dave Thomas在使用
return!loop()时注意到了类似的行为
在try/catch块中:。我认为您的程序不是这样的。是的,谢谢-我知道这个问题,但这导致了更多的开销(他发现了很多异步内容),类似于使用when do!而不是return!时的情况-在这里,我只看到不断增长的空数组,没有任何异步问题。您能给出一些代码来重现该问题吗?我将尝试获取一个简单的示例-但它现在不在我的优先级列表的顶部,因此可能需要一段时间-抱歉,我认为假设问题n asker知道这些,从问题判断。此外,你的答案与MailboxProcessor无关,更不用说具体的问题(数组及其增长)。事实上,我还知道:如果MailboxProcessor的实现不起作用,那么就没有人连接任何事件(我想这就是它的意思)这只是关于.NET中内存泄漏管理的一个小评论。这只是关于.NET中内存泄漏管理的一个小评论。如果没有多大帮助,很抱歉,但可能您使用了错误的武器来查找内存泄漏。可能您在委托类方法上分配内存,并且在销毁时不会释放内存oy那些对象。我不是F#的粉丝,所以我不知道它的本质,但我做了我的mem泄漏搜索,如果我不在类似委托的方法上分配内存,.NET的东西总是没有泄漏的。