26

現在、長時間実行されているサービス (F# を使用) でいくつかのメモリ リークを探しています。これまでに見た唯一の「奇妙な」ものは次のとおりです。

  • QueueChannelCommands という名前の代数データ型を持つサブシステムで MailboxProcessor を使用します (多かれ少なかれ一連の Add/Get コマンド - AsyncReplyChannels が添付されたものもあります)
  • (Ants Memory Profiler を使用して) サービスをプロファイリングすると、言及されたタイプの配列のインスタンスが表示されます (ほとんどの長さは 4 ですが、成長しています) - Control.Mailbox によって参照が保持されているように見えるすべての空 (null): ここに画像の説明を入力

私のコードには、この動作の理由がわかりません (標準コードは、そこにあるすべての Mailbox-example で見つけることができlet! = receiveますmatchreturn! 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 に答える