Завершает ли сборщик мусора после того, как весь основной метод завершил выполнение или все еще выполняется в фоновом режиме, чтобы очистить все объекты, оставшиеся в памяти в основном методе.Когда сборщик мусора в выводе C#
ответ
Сборщик мусора будет работать в фоновом режиме при выходе из программы, чтобы запустить ожидающие финализаторы, но если финализаторы занимают слишком много времени, он преждевременно откажется от него и выйдет из него.
Вы можете продемонстрировать это со следующей программой:
using System;
using System.Diagnostics;
using System.Threading;
namespace Demo
{
class Test
{
~Test()
{
Thread.Sleep(250);
Trace.WriteLine("In Test finalizer");
}
}
class Program
{
static void Main()
{
var t = new Test[20];
for (int i = 0; i < 20; ++i)
t[i] = new Test();
//t = null;
//GC.Collect();
//GC.WaitForPendingFinalizers();
}
}
}
Выполнить эту программу под отладчиком, и вы увидите, что только некоторые из 20 финализаторов фактически работать до GC отказывается.
Однако, вы можете быть уверены, что все ожидающие финализаторы полностью выполняются в конце программы, вызвав
GC.Collect();
GC.WaitForPendingFinalizers()
Если раскомментировать три закомментированные линий в конце Main()
в примере коде выше и снова запустите программу под отладчиком, вы увидите, что будут выполнены все 20 вызовов финализатора Test
.
Как только процесс завершается, все ресурсы, принадлежащие ему, освобождаются. Это выполняется операционной системой. GC предназначен для управляемого ресурса.
Я предполагаю, что основным является метод точки входа в этом случае, например, в консольном приложении.
Для исполняемых файлов C# main почти всегда является точкой входа, даже если у вас есть формы. – MicroVirus
Сборщик мусора (GC) запускается с вашим приложением и выйдет с ним. Во время вашего жизненного цикла приложения он запускается в фоновом режиме для освобождения управляемых ресурсов.
GC генерируется самой картой .net.
Что касается сборщика мусора в отношении основного метода – deshmanth
- 1. Сборщик мусора в C++
- 2. C# статический сборщик мусора?
- 3. сборщик мусора C++
- 4. C#: сборщик мусора
- 5. Когда сборщик мусора соберет Синглтон?
- 6. Когда запускает сборщик мусора .net?
- 7. AS3 - когда запускается сборщик мусора?
- 8. Когда Java вызывает сборщик мусора
- 9. Сборщик мусора
- 10. Сборщик мусора для управляемого C++
- 11. C# сборщик мусора перекрестная ссылка
- 12. Когда сборщик мусора используется в java?
- 13. Сборщик мусора в Node.js
- 14. Haskell сборщик мусора
- 15. Сборщик мусора в .NET
- 16. Сборщик мусора в Java
- 17. java primitives сборщик мусора
- 18. Как сборщик мусора выпускает память в C#
- 19. Python, сборщик мусора
- 20. Реализация Mark Sweep Сборщик мусора в C
- 21. Когда сборщик мусора освобождает объект запроса?
- 22. Где и когда начинается сборщик мусора?
- 23. CMS сборщик мусора - когда он запускается?
- 24. Когда сборщик мусора Java восстанавливает память?
- 25. Сборщик мусора Java - Когда он собирает?
- 26. экземпляр Singleton - сборщик мусора?
- 27. Сборщик мусора против пула
- 28. .NET сборщик мусора
- 29. PHP расширять сборщик мусора
- 30. Сборщик мусора - окончательная доработка
Финализаторы по-прежнему должны запускаться после выхода main, поэтому он вскоре после завершения всего кода пользователя завершил выполнение GC/framework. Было бы интересно иметь технический, правильный ответ на этот вопрос. – MicroVirus
Приложение обычно заканчивается, когда заканчивается метод Main (и как таковой пункт входа в программу). На этом этапе GC может работать немного, но в конечном итоге операционная система очистит всю выделенную память. – poke
сборщик мусора работает в * отдельном потоке *, поэтому он может быть продолжен, даже если возвращается 'Main' –