Не отписаться от событий COMObject может привести к утечке памяти, хотя я использую Marshal.FinalReleaseComObject? - PullRequest
1 голос
/ 08 февраля 2012

Не отписываться от событий COMObject может привести к утечке памяти, хотя я использую Marshal.FinalReleaseComObject?

Я определил новый член в своем классе, который является COMObject

protected COMObject.Call call_ = null;

Этот класс имеетСледующие обработчики событий, на которые я подписался

call_.ActionA += new COMObject.AEventHandler(AEvent);
call_.ActionB += new COMObject.BEventHandler(BEvent);
call_.Destructed += new COMObject.DestructedEventHandler(CallDestructedEvent);

Когда вызывается событие Destructed, я делаю Marshal.FinalReleaseComObject

Marshal.FinalReleaseComObject(call_) 

, но не отписываюсь от событий

call_.ActionA -= new COMObject.AEventHandler(AEvent);
call_.ActionB -= new COMObject.BEventHandler(BEvent);
call_.Destructed -= new COMObject.DestructedEventHandler(CallDestructedEvent);

Это может вызвать утечку памяти?или что GC справится?Можете ли вы связать свой ответ с каким-нибудь MSDN или статьей?

Спасибо!Дор.

1 Ответ

1 голос
/ 08 февраля 2012

Вы пытались отписаться от них перед выпуском релиза, чтобы посмотреть, помогает ли это утечке памяти? У вас есть разрушенный обработчик, вы можете сделать это там.

Вы когда-нибудь вызывали какие-либо свойства COM-объекта, и если вы это сделаете, Правильно ли вы их тоже высвободили? Я думаю, что даже если вы вызовете FinalReleaseComObject для родительского объекта, если вы еще не освободили дочерние объекты, то даже если нет ссылки на родительский объект, все равно могут быть ссылки на висящие дети.

...