Сначала вам нужно изучить, что происходит внутри сборщика мусора во время работы вашей программы. Обычно сборщик мусора хорошо решает, когда удалять объекты без вашего вмешательства. Тем не менее, это не подвержено ошибкам. Например, вы можете хранить список небольших объектов, содержащих ссылки на крупные объекты, которые, как вы ожидаете, скоро умрут. Чтобы понять узкие места в GC, вам нужно профилировать распределение памяти GC. Для этого ...
1) Поиск "монитора производительности" в Windows Start
2) На вкладке инструментов мониторинга выберите монитор производительности. Очистите все имеющиеся у вас счетчики с помощью «правого клика-> удалить все счетчики»
3) щелкните правой кнопкой мыши -> Добавить счетчики
4) Выберите все счетчики в разделе «.NET CLR memory». Когда вы добавляете их, убедитесь, что вы запускаете свою программу и выбираете программу из списка слева. Это гарантирует, что ваши счетчики будут сообщать о производительности вашей программы, но не о чем-либо еще
5) Как только вы запустите счетчики, пожалуйста, прочитайте следующие статьи, чтобы найти узкие места в вашей программе.
Основы сборщика мусора
http://msdn.microsoft.com/en-us/magazine/bb985010.aspx
О чем говорят счетчики монитора производительности
http://msdn.microsoft.com/en-us/library/x2tyfybc.aspx
http://netrsc.blogspot.com.es/2008/01/net-clr-memory-performance-monitoring.html
Как только вы ознакомитесь с основами, поищите следующие вопросы
1) Куча больших объектов фрагментируется слишком быстро
2) Объекты, которые вы хотите быстро умереть, заканчиваются во втором поколении
Например. кризис среднего возраста http://blogs.msdn.com/b/ricom/archive/2003/12/04/41281.aspx
3) Общее количество принятых байтов продолжает увеличиваться
4) Вы тратите слишком много времени на сбор мусора
5) и многое другое ... (проблемы с памятью в GC)
Поскольку вы не можете определить, какие объекты живут в разных поколениях, вы можете использовать что-то вроде профиля памяти ANST, чтобы увидеть, непреднамеренно ли вы продвигаете недолговечные объекты в поколение 2. Профилировщик позволяет вам видеть, кто содержит ссылки на большие объекты пик в различных хранилищах сборщика мусора (например, кто живет в поколении 2, кто живет, это куча больших объектов). Но перед выполнением какой-либо предварительной настройки производительности используйте монитор производительности Windows, чтобы определить, действительно ли ваши узкие места связаны с GC.