Obiekty COM zwykle mają deterministyczne zniszczenie: są uwalniane po zwolnieniu ostatniego odnośnika.C# + COM Interop, deterministic release
Jak to się robi w C# - COM Interop? Klasy nie implementują IDisposable
, więc nie widzę sposobu, aby wyzwolić jawne IUnknown :: Release.
Nieformalny test pokazuje, że obiekty COM bez odwołań są gromadzone leniwie (tj. Wywoływacz wywołuje zwolnienie). Co powinienem zrobić dla obiektów OCM, które muszą zostać wydane agresywnie? (np. utrzymywanie dużych lub współdzielonych zasobów krytycznych)?
Oryginalny problem: Mamy aplikację C# mocno korzystającą z biblioteki COM, która wycieka jak szalona. Wydaje się, że problem dotyczy "pomiędzy" C++ i C# (mamy dostęp do obu), ale nie możemy tego naprawić.
+1, bo to uratowało mi życie więcej niż jeden raz. – OregonGhost