26

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

  • 我在具有名为 QueueChannelCommands 的代数数据类型的子系统中使用 MailboxProcessor(或多或少一堆 Add/Get 命令 - 有些附加了 AsyncReplyChannels)
  • 当我分析服务(使用 Ants Memory Profiler)时,我看到了提到类型的数组的实例(大多数长度为 4,但正在增长) - 全部为空(null),其引用似乎由 Control.Mailbox 持有: 在此处输入图像描述

我在我的代码中看不到这种行为的任何原因(您可以在每个邮箱示例中找到您的标准代码 - 只是一个带有 alet! = receive和 a的循环以 amatch结尾return! loop()

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

更新:数组的增长真的很奇怪 - 似乎在没有正确使用蜜蜂的情况下附加了额外的空间: 在此处输入图像描述

4

2 回答 2

2

无论如何,我都不是 F# 专家,但也许您可以查看此线程中的第一个答案:

Async.StartChild 是否有内存泄漏?

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

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

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

希望这可能会有所帮助?

托尼

于 2012-08-08T08:36:49.430 回答
-5

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

于 2012-03-21T11:31:07.697 回答