Что подразумевается под терминами управляемого ресурса и неуправляемого ресурса в .NET? Как они попадают в картину?Что означает «управляемые» и «неуправляемые» ресурсы в .NET?
ответ
Термин «неуправляемый ресурс» обычно используется для описания чего-то , не находящегося под контролем сборщика мусора. Например, если вы открываете соединение с сервером базы данных, это будет использовать ресурсы на сервере (для поддержания соединения) и, возможно, другие ресурсы нетбука на клиентской машине, если поставщик не полностью написан в управляемом коде.
Это почему-то вроде подключения к базе данных, рекомендуется писать код таким образом:
using (var connection = new SqlConnection("connection_string_here"))
{
// Code to use connection here
}
Как это гарантирует, что .Dispose()
вызывается на объекте соединения, гарантируя, что любые неуправляемые ресурсы очищаются ,
Управляемые ресурсы - это те, которые являются чистым кодом .NET и управляются средой выполнения и находятся под ее прямым контролем.
Неуправляемые ресурсы - это те, которые не являются. Файловые ручки, фиксированная память, COM-объекты, подключения к базам данных и т. Д.
Основное различие между управляемым и неуправляемым ресурсом является то, что сборщик мусора знает обо всех управляемых ресурсов, в какой-то момент времени ГХ придет и очистить всю память и ресурсы, связанные с управляемым объектом , GC не знает о неуправляемых ресурсах, таких как как файлы, потоки и ручки, поэтому, если вы не очистите их явно в , то ваш код будет исчерпан утечками памяти и заблокированными ресурсами.
Для получения более подробной информации - http://bytes.com/topic/c-sharp/answers/276059-what-unmanaged-resources
«Идея интерфейса IDisposable - позволить вам очищать ресурсы детерминированным способом и очищать неуправляемые ресурсы». Удивительно! – zionpi
Управляемые ресурсы ресурсы, которые могут быть высвобожденные сборщиком мусора и неуправляемые ресурсы не могут быть высвобожденные сборщиком мусора для этого требуется деструктор.
В Q & What are unmanaged resources? , Брюс Вуд писал следующее:
Я думаю, что термины "управляемых" и "неуправляемый" таким образом:
«Управляемый « ссылается на что-либо в песочнице .NET. Это включает в себя все классы .NET Framework.
«Неуправляемый» относится к пустыне вне изолированной программной среды .NET. Это включает в себя все, что возвращается вам через вызовы функций Win32 API .
Если вы никогда не вызов функции API Win32 и никогда получить обратно любой Win32 «обрабатывать» объекты, то вы не держит никаких неуправляемых ресурсов. Файлы и потоки, которые вы открываете с помощью методов класса .NET Framework, - это все управляемые обертки.
Комментарий: Вы, возможно, рушатся неуправляемый ресурс непосредственно. Тем не менее, вы можете удерживать неуправляемый ресурс косвенно через управляемый «класс-обертка», такой как System.IO.FileStream. Такой класс обертки обычно реализует IDisposable (либо напрямую, либо через наследование).
... много управляемых (.NET Framework) объекты держит неуправляемые ресурсы внутри них, и вы, вероятно, хотите Dispose() из них, как только вы можете, или по крайней мере предложить своим абонентам в возможность сделать это. Вот где писать свой собственный метод Dispose() метода поставляется в сущности, реализация IDisposable() делает две вещей для вас:.
Позволяет избавиться от каких-либо ресурсов, которые вы схватили прямо из операционной системы за .NET назад (неуправляемые ресурсы).
Позволяет и звонящие выпустить здоровенные объекты .NET/.NET объектов, которые держат ценные ресурсы в своей обшарпанной маленьких руки, что вы/ваши абоненты хотите выпустили прямо сейчас.
Комментарий: Реализуя IDisposable
и тем самым обеспечивая Dispose()
метод, вы позволяя пользователю вашего класса, чтобы выпустить в детерминированной образом любые неуправляемые ресурсы, которые хранятся в экземпляре ваш класс ,
Link первоначально разделял Sachin Shanbhag's answer. Цитированный материал от 2005-11-17 гг. Обратите внимание, что я слегка скопировал отредактированный цитированный контент.
- 1. Что такое управляемые ресурсы и неуправляемые ресурсы?
- 2. Управляемые и неуправляемые ресурсы в .Net
- 3. Что такое неуправляемые ресурсы?
- 4. Использует ли .NET mutex неуправляемые ресурсы? Статья
- 5. Неуправляемые ресурсы и Dispose()
- 6. Доступны ли управляемые или неуправляемые ресурсы игровых объектов Unity?
- 7. Как сравнить управляемые и неуправляемые строки?
- 8. Попытка разгрузить неуправляемые и управляемые сторонние DLL
- 9. Как мы можем различать управляемые и неуправляемые ресурсы в C#? Является ли TextFieldParser неуправляемым?
- 10. Как GC выпускает управляемые ресурсы в C#
- 11. Джерси и ресурсы, управляемые Guice
- 12. Solr Cloud Управляемые ресурсы
- 13. Многочисленные неуправляемые ресурсы Python и безопасность исключений
- 14. Как удалить управляемые и неуправляемые объекты в C#?
- 15. Как отделить управляемые и неуправляемые библиотеки DLL в другом каталоге
- 16. Как смешивать смешанные типы (управляемые и неуправляемые) в C++/CLI?
- 17. Общие классы .NET, которые полагаются на неуправляемые ресурсы
- 18. Управляемые и неуправляемые структуры не имеют одинакового размера
- 19. как автоматически удалять управляемые и неуправляемые объекты из закрытого события?
- 20. Какие объекты класса C# приобретают неуправляемые ресурсы? Есть ли список?
- 21. sbt - добавить неуправляемые ресурсы в консоль
- 22. Как преобразовать эти две неуправляемые структуры в управляемые типы?
- 23. Что такое правильный способ Утилизировать управляемые ресурсы в IDependencyScope
- 24. Тестирование модуля, если неуправляемые ресурсы очищены
- 25. Что означает «InvokeRequired» и «Invoke» означает в .Net?
- 26. C# cleanup неуправляемые ресурсы, когда процесс убит
- 27. Что такое неуправляемые объекты?
- 28. Возможно ли сделать как управляемые, так и неуправляемые версии одной и той же сборки C++?
- 29. Подключиться к COM-событиям на C# - поддерживать как управляемые, так и неуправляемые серверы
- 30. Как GC собирает ресурсы в статическом члене в .NET?
Я бы уточнил это немного: «неуправляемый ресурс» - это то, что сборщик мусора не знает, как очистить после, если он заброшен. Например, короткоживущая подписка объекта на событие из долгоживущего объекта будет неуправляемым ресурсом, хотя оба объекта находятся под контролем сборщика мусора, поскольку GC не будет знать, что подписка должен быть отменен, если абонент будет оставлен, но издателем нет. Если неограниченное количество подписчиков может быть создано и оставлено в течение срока действия издателя, это может привести к утечке памяти. – supercat
Добавление немного дополнительных разъяснений: SqlConnection (или FileStream и т. Д.) - это управляемые ресурсы, которые внутренне используют неуправляемые ресурсы, о которых GC не знает. – jimvfr
jimvfr прав, SqlConnection - пример управляемых ресурсов. Примером неуправляемых ресурсов является необходимость выделения памяти из неуправляемой памяти с помощью метода Marshal.AllocHGlobal(), который является неуправляемым ресурсом. В этом случае лучшая практика использует деструктор (~ ctor) и вызывает Marshal.FreeHGlobal() чтобы освободить эту память. –