Wie kann ich feststellen, ob mein verwalteter Code aufgrund nativer Bibliotheksaufrufe ein und durch ein leichter Bibliotheksanrufe ausgelöst wird?

StackOverflow https://stackoverflow.com/questions/244489

Frage

Ich habe eine verwaltete DLL, die in eine native Bibliothek aufruft. Diese native Bibliothek gibt im Allgemeinen INTPTRs zurück. Diese können an andere Methoden in der nativen Bibliothek übergeben werden, um Dinge zu tun oder die Bibliothek zu sagen, dass sie die mit der INTPTR verbundene Instanz freigeben soll. Aber nur einige der Fälle müssen auf diese Weise befreit, andere werden von der Bibliothek verwaltet. Das Problem ist, dass die Dokumentation nicht immer klar ist, welche Instanzen befreit werden müssen und welche nicht.

Was ich wissen möchte, ist, ob es eine Möglichkeit gibt, wie ich feststellen kann, ob mein Code Hinweise auf einen der Zeiger gehalten hat, die befreit werden müssen, und das Speicher ausgelöst wird?

War es hilfreich?

Lösung

Der einfachste Weg ist wahrscheinlich, einen Speicherprofiler zu verwenden. Ein schnelles Google ergab einen Link zu Link zu Memprofiler. Ich habe das einmal verwendet (als Versuch) und konnte Orte finden, an denen ich DirectoryEntries nicht ordnungsgemäß entsorgt habe. Ich bin sicher, es gibt andere, einschließlich dieser eines von Redgate.

Andere Tipps

Ich benutze Windbg (es ist verfügbar hier). Die Befehlszeile enthält jedoch viele gute Berichte, umfassen Stapelinformationen, Zahlen von Objekten und Größe (dies kann auf Elemente hinweisen, die nicht entsorgt werden).

Es gibt auch das Debug -Diagnose -Tool, das eine spezifische Berichterstattung für Speicher und Lecks enthält. Es ist hier

Möglicherweise möchten Sie eine Verwendung in Betracht ziehen Saferehandles Um die Griffe aus dem nativen Code zurückzuwickeln. Es bietet einen zusätzlichen Wert über eine INTPTR.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top