0

COMオブジェクトまたはその他のアンマネージインスタンスがC#から作成される場合、アンマネージメモリはシステムにどのように割り当てられますか?

4

2 に答える 2

6

CLRは、インスタンス化するCOMオブジェクトのRuntime Callable Wrapper(RCW)を作成します。これは、.NETからCOMシステムへの一種の相互運用プロキシです。したがって、作成したCOMオブジェクトが割り当てられ、CLRで作成されたCOMオブジェクトへの参照が、ヒープに配置されます。

IDisposableRCWは自動的にクリーンアップされないため、RCWへの参照を保持するクラスに常に実装する必要があります(ラッパーは.NETヒープ上にありますが、COMオブジェクト自体はそうではありません)。ラッパーを呼び出すDispose()と、COMオブジェクトが解放されます。したがって、実装しIDisposableないとメモリリークが発生します。

于 2011-04-29T09:47:18.687 に答える
0

私の推測では、それらは、管理されていないヒープ上にメモリを作成するためにOSを呼び出す結果になります。CLRは管理されていないため、明らかにそれらとは何の関係もありません。

于 2011-04-29T09:45:43.630 に答える