2012-06-22 12 views
6

一度に何時間も実行する必要のある診断ツールを作成していますが、アプリケーションの実行後にCheckedListBoxから項目を削除しようとすると、不思議なメモリ不足例外が発生しています2〜3時間。CheckedListBoxメモリリーク

我々が最初にcheckedListBox.Items.Clear();を使用してみました、といくつかの周りグーグルの後、我々は代わりに次のようなものを試してみました:

for (int i = checkedListBox.Items.Count - 1; i >= 0; i--) 
{ 
    checkedListBox.Items.RemoveAt(i); 
} 

残念ながら、上記の問題を解決していませんでした。私はMSDNフォーラムでそのアイデアを見つけましたが、私の人生は今朝再びリンクを見つけることができません。しかし、そのフォーラムでは、誰かがアプリケーションのプロファイルを作成し、メモリリークがCheckedListBox.Items.Clear()で見つかったと言っていました。

誰でも機能的な回避策を知っていますか?

EDIT: FingerTheCatの答えは一時は、私たちの問題を解決したので、私は今の答えとしてそれをマークします。しかし、私たちは実際の問題を見つけようと試みるためにコードをコーディネートし始めました。残念ながら、現在の実装は主にスパゲッティコードなので、何かを見つけるまで数日かかることがあります。

+0

チェックされたリストボックスにどのようなアイテムを追加しますか?これらのオブジェクトを明示的にクリーンアップするだけでなく、リストボックスからそれらを削除する(例えば、Dispose()など)ことが必要な場合があります。 – MusiGenesis

+0

forループでメモリリークを解決できましたか? – Damith

+3

CheckedListBoxがメモリリークを持っていないと思います。 Perfmon.exeを使用して.NETパフォーマンスカウンターを観察し、定期的なガベージコレクションが行われていることを確認します。そうでなければ、あなたのアプリでDispose()コールが見つからないために狩りをする必要があります。 –

答えて

0

誰かが、デバッグコードをアプリケーションに残しました。これは、かなり詳細なログ情報をArrayListにクリアすることなく追加していました。そのコードはArrayListのコピーをそれ自身にも追加していました。間違いなく忘れることは良いことではありません。

-2

あなたのコードのいくつかの点でGarbageCollectorを呼び出すのが最善のことです。 GC.Collect()を追加するだけです。いくつかのループの近くでそれはあなたの記憶の問題を修正する必要があります。

+2

これは、確かに正しい修正ではありません。 GC.Collect()は実際の問題を診断する際にはまだ役立つかもしれません。 – Henrik

+1

'GC.Collect()'を呼び出すのは解決策ではありません。 –

関連する問題