Diagnozowanie wycieków pamięci natywnej w zarządzanej aplikacji jest (przynajmniej początkowo) bardzo podobne do diagnozowania wycieków pamięci w dowolnej innej natywnej aplikacji.
Sposób, w jaki normalnie podchodzę do tych problemów, polega na tym, aby proces wyciekł z dużej ilości pamięci, wykonać pełny zrzut procesu, a następnie zbadać zrzut, aby zobaczyć, co zużywa najwięcej pamięci. Na przykład, jeśli twój proces ma normalne/początkowe prywatne bajty ~ 20MB, ale możesz sprawić, że twój proces wycieka z pamięci, dopóki nie ma ~ 200 MB prywatnych bajtów, to jest duża szansa, że ~ 180 MB tej pamięci wycieknie - ogólnie mówiąc cokolwiek ma najwięcej przydzielonej pamięci, to gdzie powinieneś zacząć szukać.
Microsoft ma bardzo przydatne narzędzie o nazwie DebugDiag - początkowo opracowane do użytku w diagnozowaniu wycieków pamięci w IIS, jest bardzo płynnym narzędziem i bardzo przydatne w rozwiązywaniu problemów z pamięcią. Jeśli wykonasz zrzut awaryjny, wykona on analizę i powinien (przynajmniej) powiedzieć, który moduł przydzielił całą tę pamięć, możesz wtedy zacząć bardziej szczegółowo analizować, w jaki sposób moduł ten jest używany.
Czy wiesz, gdzie jest wyciek? Nie możemy ci pomóc bez kodu ... –
Nie piszesz natywnego kodu w C#. Z pewnością jedyną rzeczą, którą możesz zrobić, to upewnić się, że poprawnie posługujesz się InterOp? –
Jest to typowy problem z profilerami, mówią one więcej, niż chciałeś wiedzieć. Rosnące prywatne bajty nie są niczym niezwykłym, może upłynąć trochę czasu, zanim się ustabilizuje. Czy otrzymujesz wyjątki OutOfMemory? Jeśli nie, odwróć w tym celu bit ignorowania. –