Мое приложение (C # .NET 4.0) работает в течение нескольких дней, обновляя смоделированную учетную запись в соответствии с изменениями цен, полученными из базы данных SQLite.
Все, что мне нужно на конкретную дату, - это учетная запись в ее текущем состоянии и последние цены. Я ожидаю, что сборщик мусора сохранит использование памяти на довольно ровном уровне: я вижу постоянное увеличение рабочего набора и частной памяти (как сообщает System.Diagnostics.GetCurrentProcess()
), а также GC.GetTotalMemory(true)
: около 300 КБ. в день в этом случае. Неизбежно, все это рушится примерно через 12 лет моделирования, после чего использование памяти увеличилось примерно на 1 ГБ.
Использование памяти увеличивается более или менее линейно (гораздо более плавно, если я нажимаю GC.Collect()
в конце каждого дня).
Я делаю вывод, что некоторые объекты почему-то не подлежат сборке мусора, даже когда я думаю, что в них больше нет необходимости и ожидал, что они будут вычищены в обычном периодическом режиме.
Что я мог бы попытаться определить, где мне непреднамеренно удалось создать такую ситуацию?
Я скачал и запустил CLRProfiler - тем не менее, большую часть выходных уйдет на то, чтобы переварить документацию, и нет никаких гарантий, что он сможет помочь.
Я работаю по ссылкам в этом вопросе . В общем, я знаю, какая ситуация может быть причиной проблемы, мне больше интересно узнать, есть ли более быстрые способы определения специфики, не тратя драгоценные дни на проработку кода, помечающего ссылки ...
ПРИМЕЧАНИЕ. Проблема не связана с событием, и в ней нет графического компонента.