Я пытаюсь отследить утечки памяти в своем приложении с помощью Visual Studio Performance Profiler
Я использую профилировщик, чтобы:
- выполнять действия
- Снимок
- Force GC
- снимок снова
И я вижу, что весь мой объектный мусор правильно собран.
Я делаю то же самое, но использую свое приложение:
- выполнять действия
- Снимок
Принудительно использовать сборщик мусора во время выполнения с помощью кода:
GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect();
снимок снова
Но на этот раз объекты не собираются и все еще находятся в памяти.
Так в чем разница между кнопкой Force GC
и кодом GC.Collect()
, который я вызываю?
GC.Collect();
, если вы профилируете сборку DEBUG или если приложение профилировщика ведет себя как отладчик, оно продлит время жизни локальных переменных, возможно, достаточно, чтобы сделать они будут живы за пределами коллекции. - person Lasse V. Karlsen   schedule 29.01.2020GC.Collect
, но поскольку это закрывается сама страница, она может удерживать все во времяGC.Collect
- person user1   schedule 29.01.2020