Grundlegendes zu Speicherleistungsindikatoren

[Update - 30. September 2010]

Da ich viel über dieses und verwandte Themen gelernt habe, schreibe ich alle Tipps, die ich aus meinen Erfahrungen und Vorschlägen in den Antworten hier unten gesammelt habe-

1) Verwenden Sie Memory Profiler (versuchen Sie es zunächst mit CLR Profiler) und suchen Sie die Routinen, die max mem verbrauchen, und optimieren Sie sie, wie z. B. die Wiederverwendung großer Array

2) Weisen Sie nach Möglichkeit kleine Objekte zu (weniger als 85 KB für .NET 2.0) und verwenden Sie Speicherpools, wenn Sie eine hohe CPU-Auslastung durch den Garbage Collector vermeiden können.

3) Wenn Sie die Verweise auf Objekte erhöhen, müssen Sie die Verweise genauso oft aufheben. Sie haben die Gewissheit, dass Code wahrscheinlich besser funktioniert.

4) Wenn nichts funktioniert und Sie immer noch keine Ahnung haben, verwenden Sie die Eliminierungsmethode (Kommentar- / Überspringcode), um herauszufinden, was den meisten Speicher verbraucht.

Die Verwendung von Speicherleistungsindikatoren in Ihrem Code kann ebenfalls hilfreich sein.

Hoffentlich diese Hilfe!

[Ursprüngliche Frage]

Hallo

Ich arbeite in C # und mein Problem besteht ausnahmsweise aus Speichermangel.

Ich habe hier einen ausgezeichneten Artikel über LOH gelesen ->http: //www.simple-talk.com/dotnet/.net-framework/die-gefahren-des-großen- Objekts-heap

Super gelesen!

Und,http: //dotnetdebug.net/2005/06/30/perfmon-your-debugging-buddy

Mein Problem:

In einer Desktop-Anwendung auf Unternehmensebene ist nicht genügend Arbeitsspeicher verfügbar. Ich habe versucht, Informationen über Speicherprofile und Leistungsindikatoren zu lesen und zu verstehen (habe auch WinDBG ausprobiert! - ein bisschen), aber ich weiß immer noch nichts über grundlegende Dinge.

Ich habe versucht, mit dem CLR-Profiler die Speichernutzung zu analysieren. Es war hilfreich in:

Showing mich, die riesige Stücke des Gedächtnisses zugeteilt

Welcher Datentyp verwendet den maximalen Speicherplatz

Aber sowohl CLR Profiler als auch Leistungsindikatoren (da sie dieselben Daten gemeinsam nutzen) konnten Folgendes nicht erklären:

Die Zahlen, die nach jedem Lauf der App gesammelt werden - wie kann man feststellen, ob es Verbesserungen gibt?!?!

Wie vergleiche ich die Leistungsdaten nach jedem Lauf? Ist die niedrigere / höhere Zahl eines bestimmten Zählers gut oder schlecht?

Was ich brauche

Ich suche die Tipps zu:

Wie zu befreien (ja, richtig)gelang e -Datentypobjekte (wie Arrays, große Zeichenfolgen) - aber nach Möglichkeit nicht durch GC.Collect-Aufrufe. Ich muss hin und wieder mit Arrays von Bytes mit einer Länge von 500 KB (unvermeidbare Größe :-() umgehen.

Wenn eine Fragmentierung auftritt, wie kann der Speicher komprimiert werden? .NET GC scheint dies nicht wirklich effektiv zu tun und OOM zu verursachen.

Auch was genau ist 85KB Limit für LOH? Ist dies die Größe des Objekts von der Gesamtgröße des Arrays? Das ist mir nicht sehr klar.

Welche Speicherindikatoren können erkennen, ob Codeänderungen tatsächlich die Wahrscheinlichkeit von OOM verringern?

Tipps, die ich bereits kenne

etzen Sie verwaltete Objekte auf null, und markieren Sie sie als "Müll", damit der Garbage Collector sie sammeln kann. Das ist seltsam - nach dem Setzen einesstring [] Objekt auf null, das # Bytes in allen Heaps shot up!

Vermeiden Sie das Erstellen von Objekten / Arrays> 85 KB - dies liegt nicht in meiner Kontrolle. Es könnte also viel LOH geben.

3

Memory Leaks Indicators:

# bytes in all Heaps increasing
Gen 2 Heap Size increasing
# GC handles increasing
# of Pinned Objects increasing
# total committed Bytes increasing
# total reserved Bytes increasing
Large Object Heap increasing

Meine Situation

Ich habe einen 32-Bit-Computer mit 4 GB und einem Wink 2K3-Server mit SP2.Ich verstehe, dass eine Anwendung <= 2 GB physischen RAM verwenden kannas Erhöhen der Größe des virtuellen Speichers (Auslagerungsdatei) hat in diesem Szenario keine Auswirkunge

Als OOM-Problem konzentriere ich mich nur auf speicherbezogene Leistungsindikatoren.

Bitte Ratschläge!Ich brauche wirklich etwas Hilfe, da ich mangels guter Dokumentation nicht weiterkomme!

Antworten auf die Frage(6)

Ihre Antwort auf die Frage