5 ответов:
термин "неуправляемый ресурс" обычно используется для описания чего-то не непосредственно под контролем сборщика мусора. Например, если вы откроете соединение с сервером базы данных, это будет использовать ресурсы на сервере (для поддержания соединения) и, возможно, другие non-.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
и что такое неуправляемые ресурсы?1,Брюс Дерева опубликовал следующее:
Я думаю о терминах "управляемый " и" неуправляемый " таким образом:
"управление" относится ко всему, что находится в безопасной среде .NET. Это включает в себя все классы .NET Framework.
"неуправляемый" относится к пустыне за пределами безопасной среды .NET. Этот включает все, что возвращается к вам через вызовы Win32 API функции.
Если вы никогда вызовите функцию Win32 API и никогда получить обратно любой Win32 "ручка" объекты, то вы не держите никаких неуправляемых ресурсов. Файлы и потоки, которые вы открываете с помощью методов класса .NET Framework являются все управляемые обертки.
комментарий: вы не можете держать неуправляемый ресурс напрямую. Тем не менее, вы можете держать в руках неуправляемый ресурс косвенно через управляемый "класс-оболочку", такой какSystem.IO. FileStream. такой класс-оболочка обычно реализует IDisposable (либо напрямую, либо через наследование).
...многие управляемые объекты (.NET Framework удерживая неуправляемые ресурсы внутри них, и вы, вероятно, захотите Избавьтесь () от них как можно скорее или, по крайней мере, предложите своим абонентам возможность сделать это. Вот где пишут ваши собственные распоряжаются() метод. По сути, реализация IDisposable () делает два вещи для вас:
позволяет избавиться от любых ресурсов, которые вы захватили непосредственно из операционная система за спиной .NET (неуправляемые ресурсы).
позволяет вам и вашим абонентам выпускать здоровенные объекты .NET / .NET объекты, которые держат драгоценные ресурсы в своих грязных маленьких руки, которые вы / ваши абоненты хотят освободить теперь.
комментарий: введя
IDisposableи тем самымDispose()метод, вы позволяете пользователю вашего класса выпустить в детерминированные создайте все неуправляемые ресурсы, которые хранятся в экземпляре вашего класса.
1 ссылка первоначально разделена в Сачин Shanbhag это. Цитируемый материал от 2005-11-17. Обратите внимание, что у меня слегка копировать-редактирование цитируемого содержимого.
управляемые ресурсы-это ресурсы, которые могут быть освобождены сборщиком мусора, а неуправляемые ресурсы не могут быть освобождены сборщиком мусора для этой цели требуется деструктор.
Comments