Как распределяется неуправляемая память в системе при создании экземпляров? - PullRequest
0 голосов
/ 29 апреля 2011

Как распределяется неуправляемая память в системе при создании объектов COM или любых других неуправляемых экземпляров из C #?

Ответы [ 2 ]

6 голосов
/ 29 апреля 2011

CLR создает исполняемую вызываемую оболочку (RCW) для объектов COM, которые вы хотите создать. Это своего рода прокси взаимодействия между .NET и системой COM. Поэтому созданный вами COM-объект выделяется, и в CLR создается ссылка на него, которая помещает его в кучу.

Вы всегда должны реализовывать IDisposable в классе, который содержит ссылки на RCW, потому что они не очищаются автоматически (оболочки находятся в куче .NET, а сами COM-объекты - нет). Вызов Dispose() для оболочки освобождает COM-объекты. Не реализация IDisposable поэтому вызывает утечки памяти.

0 голосов
/ 29 апреля 2011

Полагаю, они приводят к вызову ОС для создания своей памяти в неуправляемой куче.Очевидно, что CLR не имеет к ним никакого отношения, поскольку они неуправляемые.

...