を収集しているものを決定します。連続したループが実行され、MSMQキューのメッセージを待機し、メッセージを処理します。どういうわけかこのプログラムはかなりのメモリリークを持っています。私はすべてのコードを実行し、usingステートメントを使用することができるすべてを行ったが、それでも問題は解決しない。ループの回数が増えるほど、プログラムによって使用されるメモリが高くなります。このメモリは、ガベージコレクタによって再利用されることはありません。私はサービスとして動作VB.NET(.NET 4.5.2)で書かれたコンソールプログラムを持っているGC.Collect()は
私はループの一番下にGC.Collect()を入れてしまった、とメモリのほとんどを解放することができました。しかし、これは悪い習慣であり、問題を引き起こす可能性があることを認識しています。 GC.Collect()が取り除く変数を調べる方法があるかどうか疑問に思うので、問題の根本を見つけることができますか?
Do While (True)
' Code to wait for message on a queue
' Code to process message (includes calls to class library)
GC.Collect()
Loop
メモリリークは、作成したオブジェクトをリリース/廃棄しない可能性が高いためです。そう誰もあなたが呼び出されるGC' 'に関しては間違ってどこ伝えることはできません..あなたは、あなたが – MethodMan
はたぶんGCを実行するために何の理由を見ていない特定のオブジェクトの新しいインスタンスを作成しているところにグローバル検索を行うことができます。実際に問題が発生していますか(メモリ不足の例外のようなものですか)、メモリが増えても実際の問題はないと心配していますか? – Evk
リークが止まるように見えるまでコードをカットすると(ピースごとに)問題を早く解決することができると思います。それから、あなたが最後に削除したものは、犯人でなければなりません。 – mjwills