galford13x galford13x - 2 months ago 15
C# Question

Determine managed vs unmanaged resources

There are lots of questions about managed vs unmanaged resources. I understand the basic definition of the two. However, I have a hard time knowing when a resource or object is managed or unmanaged.

When I think of unmanaged resources I tend to think of native code that isn't directly part of .NET such as pinvoke or marshaling resources. I would normally think of resources meant to interface to something that will use HW such as a file handle or network connection also being unmanaged.

What about .NET objects that wrap native unmanaged resources such as a

FileStream
.

A
FileStream
must use unmanaged resources, but when I implement the
IDisposable
pattern, should I consider this a managed or unmanaged resources?

I've been assuming thus far that if the object implements
IDisposable
, then it is managed. How would I know that
IntPtr
should be handled as an unmanaged resoruce?

Answer Source

A FileStream must use unmanaged resources, but when I implement the IDisposable pattern, should I consider this a managed or unmanaged resources?

A FileStream is a managed resource.

Managed resources are classes that contain (and must manage) unmanaged resources. Usually the actual resource is several layers down.

I've been assuming thus far that if the object implements IDisposable, then it is managed.

Correct.

How would I know that IntPtr should be handled as an unmanaged resoruce?

From the documentation of the API that you got its value from. But do note that in practice, most programmers never deal with unmanaged resources directly. And when you do have to, use the SafeHandle class to turn an unmanaged resource into a managed resource.