2010-05-17 6 views
24

Ich habe einen WCF-Dienst über MSMQ ausgeführt. Der Speicher nimmt mit der Zeit allmählich zu, was darauf hinweist, dass es eine Art Speicherleck gibt. Ich habe den Dienst lokal ausgeführt und einige Leistungsindikatoren mithilfe von PerfMon überwacht. Die gesamten CLR-Speicher-verwalteten Heap-Bytes bleiben relativ konstant, während die privaten Bytes des Prozesses im Laufe der Zeit zunehmen. Das führt mich zu der Annahme, dass es eine Art unmanaged Speicherleck gibt. Unter der Annahme, dass ein Speicherleck nicht verwaltet wird, wie behebe ich das Problem? Gibt es irgendwelche Werkzeuge, die ich verwenden könnte, um mir Hinweise zu geben, was das nicht gemanagte Speicherleck verursacht? Außerdem ist mein gesamter Dienst das Lesen aus der Transaktionswarteschlange und das Schreiben in eine Datenbank, alles als Teil einer DTC-Transaktion (unter der Haube gehandhabt, indem eine Transaktion für den Dienstvertrag erforderlich ist). Ich mache nichts explizit mit COM oder DllImports.Wie untersucht man nicht verwaltete Speicherverluste in .NET?

Vielen Dank im Voraus!

Antwort

-1

Ants Profiler ist eine Überlegung wert. Soweit ich mich erinnern kann, können Sie eine Testversion herunterladen.

+18

ANTS Profiler unterstützt nicht verwaltetes Speicher Profiling. – abhilash

3

Sie können Windbg verwenden, um den Prozess Heap zu analysieren. Es gibt einige Artikel und Spickzettel, die zeigen, wie man das macht, wie Memory Leak Detection Using Windbg

1

Stellen Sie sicher, dass Sie den Service-Client nach Gebrauch schließen. etwas wie

try { 
... do work ... 
Close(); 
} ... exception handling ... { 
Abort(); 
} 
+3

Mach das 'Schließen' im 'finally'-Block - so wird es auch passieren, wenn es eine Ausnahme gibt ... – Basic