У меня есть служба Windows C#, работающая на платформе .NET Framework 3.5, которая демонстрирует постоянно растущее число GC-ручек (с использованием System Monitor на Windows Server 2003).В чем причина постоянной работы службы Windows .NET с номером Number (#) GC Handles?
Я убедился, что все ресурсы утилизированы правильно и в моем коде не установлены финалисты.
«Большой размер кучи объекта» и «# байты во всех кучах» являются сравнительно статичными, и я вижу, что «% время в GC» показывает, что коллекции мусора происходят.
Счетчик «Частных байтов» также увеличивается.
Этот симптом заставляет мое «использование памяти» в диспетчере задач расти со скоростью около 35 МБ в день, что неприемлемо, так как Служба в основном запускает простой запрос SELECT против Oracle 10g и использует .NET TraceSources каждые 5 секунд. Вероятно, стоит упомянуть, что TraceSource выводит в журнал событий Windows и текстовый файл, используя объекты .NET Listeners.
Кто-нибудь знает, почему «# GC Handles» постоянно растет, так как я считаю, что это связано с моим увеличением «использования памяти»?
Используйте windbg + sos, чтобы определить, какие ресурсы просочились. Подробнее см. Http://social.msdn.microsoft.com/Forums/en-US/clr/thread/61331e3a-0f35-48cc-a9e4-8450a445abb6/. – Constantin