如何在创建实例时在系统中分配非托管内存?

sql*_*bie 0 .net c# memory-management unmanaged-memory

当从C#创建COM对象或任何其他非托管实例时,如何在系统中分配非托管内存?

Roy*_*tus 6

CLR为要实例化的COM对象创建运行时可调用包装器(RCW).这是从.NET到COM系统的一种互操作代理.因此,您创建的COM对象将被分配,并在CLR中创建对它的引用,这将它放在堆上.

您必须始终IDisposable在包含RCW引用的类中实现,因为它们不会被自动清除(包装器在.NET堆上,但COM对象本身不是).调用Dispose()包装器会释放COM对象.IDisposable因此不实现会导致内存泄漏.