Хоть в C# и есть сборщик мусора, который частично предотвращает возможность утечки памяти, все же такая возможность остается.
У меня в программе как раз она и была. И утечка очень не маленькая. За одно добавление в таблицу результата поиска утекало порядка 2 мегабайт. Это и для
компьютера не очень приятно, а для КПК вообще беда. Так как я только начал изучать C# с .NET Framework, я и понятия не имел откуда взялась утечка. Ведь во всех учебниках отдельная глава посвящена сборщику мусора.Тогда пришлось поподробнее ознакомиться с мануалами. Первым делом прочитал про метод Dispose и рекомендацию при его наличие всегда вызывать его. В своей программе обнаружил, что практически все контролы интерфейса имеют метод Dispose. И хотя он должен вызываться в Finalizer я на всякий случай его вызвал,
для каждого контрола. Утечка незначительно уменьшилась.
Здравых мыслей откуда может возникнуть утечка не было потому я решил поискать решение в интернете. Особо не заморачивался и не искал программы отслеживания утечки памяти для мобильны устройств, поэтому быстренько написал небольшой теcтовый пример, который использует класс поиска. Скачал .NET Memory Profiler.
Программа мне понравилась. Интуитивно понятный интерфейс, информативна и интегрируется в Visual Studio. Полнофункциональная версия дается на 14 дней бесплатно.
Запустил и посмотрел. Оказалось, что большая часть памяти занята графическими объектами. В своей программе я как раз получаю довольно много иконок, которые оказывается нужно освобождать. Тем же методом - Dispose. Так же освободил еще несколько неграфических объектов. Проверил - утечка прекратилась.