2012-03-27 7 views
0

Ich muss zwei XML-Dokumente vergleichen und herausfinden, mit welcher Datengröße XmlReader im Vergleich zu XmlDocument/XDocument signifikante Größenvorteile bietet.Vergleichen Sie den Speicherbedarf alternativer Implementierungen

In meiner Naivität dachte ich, ich könnte einfach meine einfache Testkonsole ausführen, die den Inhalt von zwei XML-Dateien mit zwei verschiedenen Implementierungen vergleicht (eine auf XmlDocument, die andere auf XmlReader), während ich mit einem Tool profile.

Ich habe versucht, mit CLR Profiler 4, ein kostenloses Tool aus dem Performance Architect der CLR, aber es gab mir genau keine Informationen überhaupt. Dann habe ich eine Testversion von ANTS Profiler heruntergeladen, aber das hat mir auch gar nichts gebracht!

Meine Testdatei ATM ist ziemlich klein und das Programm nur durch beide Dateien durchbrennt und dann beendet. Wenn es darauf ankommt, wird es als Konsole implementiert. Ich kann nicht ergründen, warum ich bekomme "es gibt keine Ergebnisse angezeigt werden" von ANTS und "0 Byte zugewiesen" von CLR Profiler - beide scheinen mir nur "live" Ergebnisse zu zeigen, aber ich möchte den Code ausführen und was analysieren passierte danach.

Gibt es eine einfache Möglichkeit, das herauszufinden? Stellt der GC oder verwandte Typen möglicherweise Funktionen zur Verfügung, die dies ermöglichen? Ich interessiere mich hauptsächlich für den Gesamtspeicher, obwohl es auch interessant wäre zu sehen, ob irgendwelche großen Objekte (> 80 KB und daher nicht "defragmentierbar") erzeugt werden.

-

Bitte verzichten vorformulierten „XmlReader kleiner“ oder „XmlReader hat eine flache Fußabdruck“ Antworten. Ich bin mir dessen bewusst. Aber ich muss die Größe der Gewinne feststellen und bei welcher Datengröße wird es signifikant, um tatsächlich zwischen ihnen zu wählen. Nur zu wissen, dass XmlReader "irgendwann" "deutlich kleiner" sein wird, ist einfach nicht gut genug.

+0

Zunächst einmal sicher, dass Sie die Programme korrekt verwenden. Speicherprofiler erfordern normalerweise, dass Sie einen Snapshot erstellen. Zu diesem Zeitpunkt sammelt es alle Informationen, die Sie sehen können. –

Antwort

1

Mit Speicher-Profiler nehmen Sie normalerweise zwei Snapshots vor und nach einem interessanten Ereignis und vergleichen sie dann, um Speicherverbrauch und Lecks zu sehen. So können Sie vor der Analyse und danach (vor der Freigabe aller Ressourcen) einige Console.Read() zu Ihrer App hinzufügen, in diesen Momenten Snapshots erstellen und diese vergleichen. Aber wenn Sie nur Speicherverbrauch sehen müssen, dann denke ich, dass Sie es nur mit Task-Manager oder Process Explorer tun können.

Proben: enter image description here

+0

Der Task-Manager/Process-Explorer gibt zwar einen Überblick über die Speicherauslastung, aber genau genommen sagen sie nur etwas darüber aus, wie nicht gemanagter Speicher verwendet wird. Ich weiß nicht sehr viel darüber, wie die CLR Speicher verwaltet, aber ich weiß, dass es Speicher verwaltet. Es wird zum Beispiel mehr nativen Speicher zuweisen, als es benötigt, um eine kleine verwaltete Speicherzuweisung zu erfüllen. Ähnlich kann es Speicher nach seinen eigenen Ideen freigeben und nicht direkt, wenn verwalteter Speicher freigegeben wird. Aber vor allem ist solch ein "Profiling" nicht detailliert genug, um einen Einblick zu geben, WARUM die Dinge so sind, wie sie sind. –

+0

Ich stimme dem Task-Manager zu, aber der moderne Prozess-Explorer zeigt viele Informationen über clr-Prozesse und Speicherauslastung. Sehen Sie sich den Screenshot an, den ich meiner Antwort hinzugefügt habe. – Nikolay

Verwandte Themen