Возможно ли программисту запустить/остановить сборку мусора на языке программирования C#? Например, для оптимизации производительности и т. Д.Можно ли остановить сборку мусора .NET?
ответ
Не совсем. Вы можете дать подсказки GC
с помощью таких методов, как GC.AddMemoryPressure
или GC.RemoveMemoryPressure
, но не останавливайте его прямо.
Кроме того, сбор мусора не является настолько интенсивным процессом. Программисты очень редко об этом беспокоятся.
О, я вижу ... Как насчет метода SuppressFinalize()? У него другая цель? – Alex
SuppressFinalize работает над отдельными объектами. Определенно не во всей ГК. Из MSDN: Объекты, реализующие интерфейс IDisposable, могут вызывать этот метод из метода IDisposable.Dispose, чтобы предотвратить сборщик мусора от вызова Object.Finalize на объект, который этого не требует. (Так что в основном это очень небольшое повышение производительности.) –
Я не вижу, как это будет добавление намека на * предотвращение * сбор мусора, per se; если вы вызываете 'GC.AddMemoryPressure', то это, скорее всего, приведет к тому, что CLR будет создавать * больше * сборщиков мусора, поскольку это указывает на то, что память, доступная для CLR для процесса (виртуальная или нет), меньше, чем она думает. Один * может * вызывать 'GC.RemoveMemoryPressure' без соответствующего вызова' GC.AddMemoryPressure', пытаясь обмануть CLR, думая, что у него больше памяти, чем у него, но можно подумать, что API устойчив (один надеюсь) на такие вещи. – casperOne
Нет, нет. В лучшем случае вы можете запускать сборку мусора самостоятельно, хотя это считается очень плохой вещью, поскольку это может помешать встроенным алгоритмам планирования, используемым GC.
Вы не можете активировать сбор , просто может «предложить». GC сам решит –
В общем, нет. И большинство людей считают, что преждевременная оптимизация беспокоится о сборе мусора, если вы не сделаете профилирование и не узнаете, что это действительно является причиной низкой производительности вашего приложения.
Если вы заинтересованы в том, чтобы настроить GC на производительность (или, более вероятно, настроить ваше приложение, чтобы улучшить его производительность по сравнению с GC), MSDN имеет довольно приличное описание способов его выполнения.
Между тем, это возможно, существуют методы в GC
class:
GC.TryStartNoGCRegion(...)
и GC.EndNoGCRegion()
.
- 1. Как приостановить сборку мусора в .NET?
- 2. Устанавливает ли Visual Studio сборку мусора в .Net?
- 3. Можно ли остановить сборку TeamCity с помощью конфигурации сборки?
- 4. Имеет ли Java автоматическую сборку мусора?
- 5. Требуется ли сборку узла для сбора мусора?
- 6. Имеет ли приложения Qt автоматическую сборку мусора?
- 7. Как отключить параллельную сборку мусора?
- 8. Как заставить полную сборку мусора в .NET 4.x?
- 9. Должны ли мы использовать сборку мусора или сборку мусора на «рабочей станции»?
- 10. Можно ли вводить файлы ресурсов в сборку .net?
- 11. .NET: Можно ли выгрузить сборку, загруженную для отражения?
- 12. Можно ли ссылаться на сборку .NET из ColdFusion?
- 13. Как отключить явную сборку мусора в .Net 4?
- 14. Когда JVM запускает сборку мусора?
- 15. Можно ли остановить ходунка?
- 16. Почему Java предоставляет сборку мусора?
- 17. Как заставить сборку мусора на Java?
- 18. Отключить сборку мусора в C# для отладки?
- 19. Сборщик мусора в .NET
- 20. Есть ли способ запланировать сборку полного мусора в Java?
- 21. На сборку мусора Java необходимо уточнить
- 22. как оптимизировать сборку мусора для нового поколения?
- 23. как профиль .net сборщик мусора?
- 24. Сомнения .NET сборщика мусора
- 25. Загадка коллекции мусора .NET
- 26. Эффективность сборщика мусора .NET.
- 27. Можно ли изменить приоритет потока сборщиков мусора?
- 28. Как отлаживать .net Сбор мусора?
- 29. есть ли какая-нибудь польза для обнуления ссылок на «поощрять» сборку мусора .NET?
- 30. .net 4 Приложение, выполняющее сборку .net 2.0
Сбор мусора не является частью языка программирования C#. Это часть .NET CLR. –
"Kinda". Если вы никогда ничего не выделяете, GC никогда не будет собирать. Предварительно выделите все, что вам нужно, а затем вызовите 'GC.Collect()'. –
Возможно, также взгляните на этот ответ: http://stackoverflow.com/questions/6005865/prevent-net-garbage-collection-for-short-period-of-time/6005949#6005949 – Gamlor