Was ist der beste Weg, Ihren gesamten Speicher zu finden, wenn Sie mit dem Compact Framework entwickeln?

StackOverflow https://stackoverflow.com/questions/10309

  •  08-06-2019
  •  | 
  •  

Frage

Ich habe den CF verwendet Remote-Leistungsmonitor, Dies scheint jedoch nur den in der verwalteten Welt initialisierten Speicher zu verfolgen, im Gegensatz zur nicht verwalteten Welt.Nun, ich kann das nur vermuten, da die im Profiler aufgeführten Zahlen weit unter dem maximal zulässigen Wert liegen (32 MB auf CE 5).Das Profilieren einer bestimmten App mit dem RPM zeigte mir, dass die Gesamtnutzung aller Caches nur etwa 12 MB erreicht und dann langsam schrumpft, da (ich gehe davon aus) etwas Unverwaltetes anfängt, mehr Speicher zu beanspruchen.Der Speicherschieberegler im System zeigt auch an, dass das Gerät sehr wenig Speicher hat.Wenn ich den Prozess abbreche, zeigt der Schieberegler an, dass der gesamte Speicher zurückkommt.Es muss also (?) dieser verwaltete Prozess sein, der den Speicher verschlingt.

Gibt es eine einfache Möglichkeit, die nicht verwaltete Speichernutzung auf eine Weise zu verfolgen, die es mir ermöglichen könnte, sie mit den entsprechenden P/Invoke-Aufrufen abzugleichen?

BEARBEITEN:An alle Re-Tagger, es ist nicht .NET, die Frage so zu kennzeichnen, verwirrt die Dinge.Es ist .NETCF / Compact Framework.Ich weiß, dass sie ähnlich zu sein scheinen, aber sie sind unterschiedlich, weil .NET rockt, während CF im Grunde nur ein Wrapper für NotImplementedException ist.

War es hilfreich?

Lösung

Versuchen Sie es zu aktivieren Interop-Protokollierung.

Wenn Sie Zugriff auf den Code der von Ihnen verwendeten nativen DLL haben, sehen Sie sich Folgendes an: http://msdn.microsoft.com/en-us/netframework/bb630228.aspx

Andere Tipps

Ich kämpfe definitiv seit einiger Zeit mit nicht verwalteten Problemen in einer mit C# verwalteten App – das ist nicht einfach.

Was ich als am hilfreichsten empfunden habe, ist eine regelmäßige Ausgabe in eine Textprotokolldatei.Sie können beispielsweise die Ausgabe von ausdrucken GlobalMemoryStatus alle paar Minuten zusammen mit der Protokollierung jedes Mal, wenn Sie ein neues Formular laden.Von dort aus können Sie zumindest erkennen, dass entweder das Gedächtnis allmählich nachlässt oder dass zu bestimmten Tageszeiten große Teile des Gedächtnisses verschwunden sind.

Bei uns stellten wir einen allmählichen Gedächtnisverlust fest, den ganzen Tag über, solange das Gerät verwendet wurde.Von da an stellten wir schließlich fest, dass das Barcode-Scangerät in unserer Form-Basisklasse ohne besonderen Grund initialisiert wurde (ich gebe dem vorherigen Entwickler die Schuld!).:-)

Das Einrichten dieser Protokollierung mag ein kleiner Aufwand sein, aber für uns hat es sich auf lange Sicht enorm ausgezahlt, insbesondere wenn das Gerät im Live-Einsatz ist, können wir echte Daten, Instrumentierung, Stack-Traces von Ausnahmen usw. erhalten.

Ok, ich verwende C++ auf CE, nicht C#, daher ist das vielleicht nicht hilfreich, aber ...

Ich verwende ein Paket namens Entrk-Toolbox das die Speicher- und Ressourcennutzung, Lecks und Ausnahmen unter Windows CE überwacht.Ziemlich ähnlich wie eine leichte CE-Version von Boundschecker.Funktioniert meistens.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top