0

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

4

2 回答 2

6

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

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

于 2011-04-29T09:47:18.687 回答
0

我的猜测是它们会导致调用操作系统以在非托管堆上创建内存。CLR 显然与它们无关,因为它们是不受管理的。

于 2011-04-29T09:45:43.630 回答