답변:
일반적으로 "관리되지 않는 리소스"라는 용어 는 가비지 수집기의 직접 제어를받지 않는 항목을 설명하는 데 사용됩니다 . 예를 들어 데이터베이스 서버에 대한 연결을 열면 공급자가 관리 코드로 완전히 작성되지 않은 경우 서버의 리소스 (연결 유지를 위해)와 클라이언트 컴퓨터의 다른 비 .net 리소스가 사용됩니다.
이것이 데이터베이스 연결과 같은 경우 코드를 다음과 같이 작성하는 것이 좋습니다.
using (var connection = new SqlConnection("connection_string_here"))
{
// Code to use connection here
}
이렇게하면 .Dispose()
연결 개체에서 호출되므로 관리되지 않는 리소스가 정리됩니다.
Q & A 에서 관리되지 않는 리소스 란 무엇입니까? 1 , Bruce Wood 는 다음을 게시했습니다.
"관리"및 "관리되지 않음"이라는 용어를 다음과 같이 생각합니다.
"관리 됨" 은 .NET 샌드 박스 내의 모든 것을 나타냅니다. 여기에는 모든 .NET Framework 클래스가 포함됩니다.
"관리되지 않음" 은 .NET 샌드 박스 외부의 황야를 나타냅니다. 여기에는 Win32 API 함수 호출을 통해 반환되는 모든 것이 포함됩니다.
당신이 경우 결코 는 Win32 API 함수를 호출하지 않으며 결코 어떤 Win32에서 "핸들"개체를 다시 얻을, 당신은 어떤 관리되지 않는 리소스를 보유하지 않습니다. .NET Framework 클래스 메서드를 통해 여는 파일과 스트림은 모두 관리되는 래퍼입니다.
설명 : 관리되지 않는 리소스를 직접 보유하고 있지 않을 수 있습니다 . 그러나 System.IO.FileStream 과 같은 관리되는 "래퍼 클래스"를 통해 간접적으로 관리되지 않는 리소스를 보유 할 수 있습니다 . 이러한 래퍼 클래스는 일반적으로 IDisposable을 구현합니다 (직접 또는 상속을 통해).
... 많은 관리되는 (.NET Framework) 개체가 관리되지 않는 리소스를 내부에 보유하고 있으므로 가능한 한 빨리 Dispose ()하거나 호출자에게 그렇게 할 수있는 기회를 제공 할 수 있습니다. 여기에서 자신 만의 Dispose () 메서드를 작성합니다. 기본적으로 IDisposable ()을 구현하면 두 가지 작업이 수행됩니다.
.NET의 뒤에서 운영 체제에서 직접 확보 한 리소스 (관리되지 않는 리소스)를 제거 할 수 있습니다.
당신과 당신의 발신자는 당신 / 당신의 발신자가 지금 풀고 싶어하는 귀중한 자원을 귀중한 자원을 가지고있는 무거운 .NET 개체 / .NET 개체를 해제 할 수 있습니다 .
설명 : 메서드 를 구현 IDisposable
하고 제공함으로써 Dispose()
클래스의 사용자가 클래스 인스턴스가 보유한 관리되지 않는 리소스를 결정적 방식 으로 해제 할 수 있습니다.
1 원래 Sachin Shanbhag의 답변 에서 공유 된 링크 . 2005-11-17 일자 인용 자료. 인용 된 내용을 가볍게 복사 편집했습니다.
관리되는 리소스와 관리되지 않는 리소스의 기본적인 차이점은 가비지 수집기가 모든 관리되는 리소스에 대해 알고 있다는 것입니다. 어느 시점에서 GC는 관리 대상 개체와 관련된 모든 메모리와 리소스를 정리합니다. GC는 파일, 스트림 및 핸들과 같은 관리되지 않는 리소스에 대해 알지 못하므로 코드에서 명시 적으로 정리하지 않으면 메모리 누수 및 잠긴 리소스가 발생합니다.
자세한 내용-http: //bytes.com/topic/c-sharp/answers/276059-what-unmanaged-resources