2016-06-22 11 views
3

Ich habe versucht, Speicherleck in unserer Software zu finden, und ich habe in Windows dabei in "Performance Monitor"Eine Möglichkeit, die Speicherbereinigung von Gen 0, 1 und 2 trotz konstanter Bytes in allen Heaps zu begrenzen? Und ist dieses Zeichen von Speicherlecks?

  1. Garbage Collection von Gen 1 und Gen 2 steigt exponentiell während Prozesses Report- gebaut, dass, so gefunden einige Arbeit leistet
  2. Garbage collection von Gen 1 & Gen 2 konstant bleibt, wenn Prozess im Leerlauf ist
  3. Garbage collection of Gen 0 setzt die Zeit vergeht zu erhöhen, wie durch unabhängig von Prozess einige Arbeit tut oder nicht
  4. Bytes in Alle Haufen zeigen das wird nicht im Laufe der Zeit

Ist das normal?

Hier wird die Bildschirmaufnahme Leistungsbericht ist Performance Monitor report

+0

Diagramm zeigt die Gesamtzahl der Garbage Collections seit Beginn der Verfolgung, es ist keine Häufigkeit der Erhöhung. Auch Diagramme werden in verschiedenen Skalierungen angezeigt - siehe Spalte "Skalierung" des PerfMon. Wenn Sie sich bewusst sind, dass GC zu viel Zeit in Anspruch nimmt, nehmen Sie ein geeignetes Tool und überprüfen Sie es. Beispiel: [JetBrains dotTrace] (https://www.jetbrains.com/profiler/) (im Timeline-Modus) zeigt an, wie viel Zeit Sie für die GC benötigen. –

+0

Wie wäre es mit "% Zeit in GC" Leistungszähler für diesen Zweck? –

+0

Mit vollem Verständnis, welche Nummer es zeigt - ja. "Zeigt den Prozentsatz der verstrichenen Zeit an, die für die Durchführung einer Speicherbereinigung ** seit dem letzten Speicherbereinigungszyklus aufgewendet wurde **. Dieser Zähler gibt normalerweise die vom Speicherbereiniger durchgeführte Arbeit zum Sammeln und Komprimieren von Speicher für die Anwendung an Der Zähler wird nur am Ende jeder Speicherbereinigung aktualisiert. Dieser Zähler ist kein Durchschnitt, sein Wert gibt den letzten beobachteten Wert an. " https://msdn.microsoft.com/en-us/library/x2tyfybc(v=vs.110).aspx –

Antwort

0

Diese Karten Gesamtzahl der Garbage Collection von Anfang an der Verfolgung zeigen, ist es nicht eine Frequenz von Beschaffung. Auch Diagramme werden in verschiedenen Skalierungen angezeigt - siehe Spalte "Skalierung" des PerfMon. Wenn Sie sich bewusst sind, dass GC zu viel Zeit in Anspruch nimmt, nehmen Sie ein geeignetes Tool und überprüfen Sie es. Beispiel: JetBrains dotTrace (im Timeline-Modus) zeigt an, wie viel Zeit Sie für GC verwenden.

Sie können auch den Leistungszähler "% Zeit im GC" für diesen Zweck verwenden. "Zeigt den Prozentsatz der verstrichenen Zeit an, die für die Ausführung einer Speicherbereinigung seit dem letzten Speicherbereinigungszyklus aufgewendet wurde. Dieser Indikator gibt normalerweise die vom Garbage Collector zum Sammeln und Komprimieren von Speicher für die Anwendung ausgeführte Arbeit an. Dieser Leistungsindikator wird aktualisiert nur am Ende jeder Speicherbereinigung. Dieser Zähler ist kein Durchschnitt, sein Wert spiegelt den zuletzt beobachteten Wert wider. " msdn.microsoft.com/en-us/library/x2tyfybc(v=vs.110).aspx