Я собирал счетчики производительности для управляемого приложения примерно за четыре дня. За это время были следующие коллекции мусора:(Почти) все коллекции мусора полные коллекции
- Поколение 0: 133.695
- Поколение 1: 133.413
- Generation 2: 133.254
Некоторые из них "индуцированные" полный коллекции с использованием GC.Collect()
. За четыре дня было 323 человека.
Почему все (или, по сути, все) мои коллекции будут полными коллекциями? Я предполагаю, что это обстоятельство способствует очень высокому счетчику «% времени в ГК» (выше 70%, даже когда значительно сокращается байт/сек).
Может быть, а может и не важно отметить, что я запускаю .NET 4.0, 64-разрядную версию и используя GC сервера в файле конфигурации.
Мы должны были бы узнать больше о вашем приложении, чтобы даже угадать, я думаю. – Joel
Если вы вызываете GC.Collect, вы не можете вообще рассуждать о том, как часто выполняется каждая коллекция; вы возитесь с тем, что он хочет сделать. Кроме того, GC очень динамичен в том, что он запускает коллекции, когда он думает, что это необходимо, что означает, что это будет * очень * зависит от кода, который вы используете, от того, сколько памяти вы создаете, в какой области, как долго вы держите на него и т. д. – Servy
'GC.Collect()' делает полную коллекцию всех поколений. Это определенно важный фактор. Проверьте, как изменяется число, если вы удаляете явную коллекцию. Помимо этого, мы не можем много говорить, не зная деталей вашего приложения. –