Утечка памяти CheckedListBox


Мы пишем диагностический инструмент, который должен работать в течение многих часов одновременно, но мы сталкиваемся с загадочным исключением из памяти, когда мы пытаемся удалить элементы из CheckedListBox после того, как приложение работает в течение нескольких часов.

Мы сначала попробовали использовать checkedListBox.Items.Clear();, а после некоторого поиска в Интернете, вместо этого мы попробовали что-то вроде следующего:

for (int i = checkedListBox.Items.Count - 1; i >= 0; i--)
{
   checkedListBox.Items.RemoveAt(i);
}
К сожалению, вышеизложенное не решило проблему. Я нашел эту идею на форумах MSDN, но я не могу для жизнь меня снова нашла связь этим утром. Однако на этом форуме было сказано, что кто-то профилировал их приложение и обнаружил утечку памяти в CheckedListBox.Items.Clear().

Кто-нибудь знает о функциональном обходе?

EDIT: ответ FingerTheCatвременно решил нашу проблему, поэтому я отмечу его как ответ на данный момент. Тем не менее, мы начали прочесывать код, чтобы попытаться найти реальную проблему. К сожалению, текущая реализация в основном является спагетти-кодом, так что, возможно, пройдет несколько дней, прежде чем мы что-нибудь найдем.

2 6

2 ответа:

Как оказалось, кто-то оставил в приложении фрагмент отладочного кода, который добавлял довольно многословную информацию журнала к ArrayList, даже не очистив его. Этот код также добавлял к себе копии ArrayList. Определенно не очень хорошая вещь, чтобы забыть вынуть.

Я думаю, что лучше всего вызвать сборщик мусора в некоторых точках вашего кода. Просто добавьте GC.Collect (); рядом с некоторыми циклами, и это должно исправить проблему с памятью.