Что означают термины управляемый ресурс и неуправляемый ресурс в .NET? Как они входят в картину?
Термин "неуправляемый ресурс" обычно используется для описания того, что не находится под непосредственным контролем сборщика мусора. Например, если вы открываете соединение с сервером базы данных, это будет использовать ресурсы на сервере (для поддержания соединения) и, возможно, другие ресурсы, отличные от .net, на клиентском компьютере, если провайдер не написан полностью в управляемом коде.
Вот почему для чего-то вроде соединения с базой данных рекомендуется писать код следующим образом:
using (var connection = new SqlConnection("connection_string_here"))
{
// Code to use connection here
}
Поскольку это гарантирует, что .Dispose()
вызывается для объекта ресурсы очищаются.
Управляемые ресурсы — это ресурсы, которые представляют собой чистый код .NET и управляются средой выполнения и находятся под ее непосредственным контролем.
Неуправляемые ресурсы — это те, которые не являются таковыми. Дескрипторы файлов, закрепленная память, COM-объекты, подключения к базе данных и т. д.