2014-04-07 5 views
5

Ich habe eine Anwendung mit verschiedenen Komponenten wie Windows Media Player, Image box usw. Alle Komponenten sind playing back to back oder one after another. Und ein Benutzer-Controller mit einem Panel als Elternteil enthält 5 Grids und ein Grid ist eine Kombination von 4 Labels. Und ein Formular der gleiche Benutzer-Controller hat 2 Instanz mit einem Video und einem Bild.Gibt es eine Möglichkeit, den ausgelaufenen Speicher der C# -Anwendung zu sehen?

Aus diesem Grund erhöht meine Anwendung in jeder Sekunde seine festgeschriebene Speichergröße um 2MB. Nach einiger Zeit stoppte meine Anwendung wegen zu wenig Arbeitsspeicher. Ich möchte also sehen, in welchem ​​Teil oder welcher Komponente der Speicher leckt.

Gibt es eine Freeware Software, um das Speicherleck zu überwachen?

Antwort

0

Um zu überwachen, ob es einen Speicherverlust in .NEE gibt, können Sie einfach den Windows-Systemmonitor verwenden. Von diesem Artikel: Identify And Prevent Memory Leaks In Managed Code:

Verwenden Sie PerfMon, um die folgenden Leistungsindikatoren für die Anwendung zu untersuchen: Prozess/Private Bytes, .NET CLR-Speicher/# Bytes in allen Heaps und .NET CLR LocksAndThreads/# der aktuellen logischen Threads. Der Zähler "Process/Private Bytes" meldet den gesamten Speicher, der ausschließlich für einen Prozess reserviert ist und nicht mit anderen Prozessen auf dem System geteilt werden kann. Der Zähler .NET CLR-Speicher/# Bytes in allen Heaps gibt die kombinierte Gesamtgröße der Heaps für Gen0, Gen1, Gen2 und große Objekte an. Der .NET CLR-Wert LocksAndThreads/# des aktuellen Indikators für logische Threads gibt die Anzahl der logischen Threads in einer AppDomain an. Wenn die Anzahl der logischen Threads einer Anwendung unerwartet zunimmt, werden Thread-Stacks undicht. Wenn Private Bytes erhöht wird, aber # Bytes in All Heaps stabil bleibt, ist nicht verwalteter Speicher undicht. Wenn beide Zähler ansteigen, baut sich Speicher in den verwalteten Heaps auf.

Ein weiteres Tool zum Nachverfolgen von Speicherlecks ist: DebugDiag. Es ist sehr effektiv und auch kostenlos.

0

"Wenn Sie vermuten, dass ein Speicherverlust im Benutzermodus vorliegt, aber nicht sicher ist, welcher Prozess das verursacht, können Sie mithilfe des Systemmonitors die Speichernutzung einzelner Prozesse messen."

Siehe http://msdn.microsoft.com/en-us/library/windows/hardware/ff560134(v=vs.85).aspx

+0

danke für die Antwort Ich verbrachte einige Zeit, um den Systemmonitor von diesem zu verwenden Ich bin in der Lage, das Gesamtspeicherdiagramm aus meiner Anwendung zu erhalten –

0

einen Speicher-Profiler verwenden, wie ANTS Memory Profiler oder EQATEC

0

Ich rate Ihnen CLR Profiler zu verwenden, ist es kostenlos und frei verteilbare Anwendung:

Die primäre Funktion CLR Profiler ermöglicht es Ihnen, zu verstehen, wie Ihre Anwendung mit dem verwalteten, auf Garbage Collection gesammelten Heap interagiert. Zu den wichtigeren Dingen, die Sie untersuchen können, gehören:

  • Wer weist was auf dem verwalteten Heap zu.
  • Welche Objekte auf dem verwalteten Heap überleben.
  • Wer hält an Objekten fest.
  • Was der Garbage Collector über die Lebensdauer Ihrer Anwendung tut.

Weitere Informationen finden Sie unter diesem Link:

How To: Use CLR Profiler

+0

Dank @Anatoliy sieht es wie gut aus, aber ich meine Anwendung über Nacht laufen. Am Morgen der Clr Profiler hat ein Pup up sagen das Programm zu schließen und die CLR-Eingabeaufforderung sagen nicht genügend Speicher –

0

Neben ANTS oder EQATEC Sie haben auch JetBrains dotTrace. Auch wenn Sie keinen Profiler verwenden möchten, können Sie Ihren Code durchsuchen und nach verfügbaren Objekten suchen. Jedes Einwegobjekt sollte nach Ende der Nutzung entsorgt werden. In den meisten Fällen haben Sie keine Speicherlecks mehr, wenn Sie alle Ihre Objekte korrekt entsorgt haben.

Ein Fall, in dem Sie möglicherweise weiterhin eine Ausnahme wegen zu wenig Arbeitsspeicher haben, ist, wenn Sie Multi Threading ausführen und mehr Tasks erstellen, als in einer bestimmten Zeit verarbeitet werden können.

0

Sie können versuchen Coverity.Sie finden Mängel, die beinhaltet:

  • Speicherbeschädigung
  • Crashes
  • Sicherheitslücken
  • Concurrency
  • nicht initialisierten Speicher
  • Fehler
  • Ressourcen Umgang Lecks

Sie können mehr here finden.

+0

Es ist Freeware-Software? –

+0

danke @Wasif in Coverity Ich muss meine Anwendung auf die Website hochladen.Am ich richtig @Wasif? –

+0

Richtig, Mann! Fortfahren... –

Verwandte Themen