私は現在、長時間実行されるサービス (F# を使用) でメモリ リークを探しています。これまでに見た唯一の「奇妙な」点は次のとおりです。
- 私は、QueueChannelCommands という代数データ型を持つサブシステムで MailboxProcessor を使用します (多かれ少なかれ、Add/Get コマンドの集まり - 一部には AsyncReplyChannels が添付されています)
- サービスをプロファイルすると (Ants Memory Profiler を使用)、前述のタイプの配列のインスタンスが表示されます (ほとんどは長さが 4 ですが、増え続けています)。これらはすべて空 (null) で、その参照は Control.Mailbox によって保持されているようです。
私のコードでは、このような動作の理由がわかりません(Mailboxの例でよく見かける標準的なコードです。ループが とlet! = receive
でmatch
終わり、return! loop()
これまでにこのような動作を見たことがある人や、対処方法をご存知の方はいらっしゃいますか? それとも、これは (既知の) バグなのでしょうか?
更新: 配列の増加は本当に奇妙です - 適切に使用されずに追加のスペースが追加されているようです:
ベストアンサー1
私は決して F# の専門家ではありませんが、このスレッドの最初の回答をご覧いただければと思います。
Async.StartChild にはメモリリークがありますか?
最初の返信では、次のページのメモリ プロファイリングのチュートリアルについて言及されています。
しかし、彼らはF#のオープンソース版について言及している
そして、それがあなたが探しているものかどうかはわかりませんが (最後のポイントの F# のこのオープン ソース バージョンについて)、リークの原因を見つけたり、実際にメモリがリークしていることを証明したりするのに役立つかもしれません。
それが何らかの助けになれば幸いです。
トニー