我正在查找一个长时间运行的服务(使用F#)中的一些内存泄漏问题。
目前唯一“奇怪”的事情是:
- 我在一个名为QueueChannelCommands的代数数据类型子系统中使用一个MailboxProcessor(大多数是一些带有AsyncReplyChannels附加的Add/Get命令)
- 当我使用Ants Memory Profiler对服务进行分析时,我看到了此类型数组的实例(大多数长度为4,但在增长)-所有实例都是空的(null),其引用似乎由Control.Mailbox保持:
我无法在我的代码中看到这种行为的原因(你可以在任何Mailbox示例中找到标准代码 - 只是一个循环与let!= receive
和一个match
以return! loop()
结束。
是否有人曾经见过这种行为,甚至知道如何处理它? 这是否是已知的错误?
更新:数组的增长确实很奇怪-似乎附加了未被正确使用的其他空间:
return! loop()
时出现了类似的行为:http://moiraesoftware.com/blog/2011/12/11/fixing-a-hole/。我不认为这是你的程序的情况。 - pad