2009-05-28 11 views
0

Ich bin meistens neugierig und das ist kein Problem. In der Regel verwenden meine (C++) Apps sehr wenig Speicher. Ich dachte, meine aktuelle App würde wenig Speicher benötigen, aber es verwendet 3,7 MB und VM-Größe von 17,3 MB. Die App hat 4 Symbole in der Ressourcendatei, 4 in den lokalen (Benutzer) Einstellungen und ist die App LoC ist < 1k. Es erkennt die Eingabe und schreibt eine Zeile in eine Listbox, wenn der Benutzer in den Leerlauf geht (Aufruf einer Windows-Funktion). Es hat sich selbst in die Taskleiste gelegt und hat einen Timer von 100ms.C# GUI verwendet eine Menge RAM?

Theres keine Arrays oder Speicher abgesehen von ein paar Strukturen, die weniger 256bytes zusammen sind. Warum verwendet meine App 17 MB von VM?

+0

Lassen Sie uns wissen, was Sie verwenden. WinForms/WPF/...? – Noldorin

+1

Ich vermute, dass Sie virtuellen Speicher mit physischem Speicher verwechseln. Sie sind sehr, sehr unterschiedliche Bestien. Zu Ihrer Information, ich werde nächste Woche einen Blogartikel veröffentlichen, der den Unterschied erklärt. –

Antwort

4

17 Megs klingt nach rechts für eine einfache C# -App.

Ich denke, es ist der ewige 'Hardware-Einsatz versus Programmierer Produktivität' Argument.

10

Da es sich um eine verwaltete Anwendung handelt, wird auch ein Teil der CLR in den Speicher geladen. Außerdem weist die CLR eine Menge Speicher zu, damit sie neue Objektanforderungen erfüllen kann (sie weist nicht jedes Objekt dem System zu). Es gibt auch eine Menge anderer Objekte, die für jede Anwendung in einem verwalteten Modell zugewiesen werden (z. B. der Thread-Pool, der Garbage Collector usw.).

Ich bin mir nicht sicher, ob Sie viel tun können, um das zu reduzieren, aber auf der anderen Seite werden Sie es nicht linear mit der App-Komplexität skalieren sehen (wie wenn Sie es zweimal die Komplexität machen, wird es nicht verwende den doppelten Speicher.

2

Zu beachten ist, dass jeder verwaltete Thread auch einen 1MB-Stack hat. Wenn du irgendetwas mit Threads machst, sind das sofort ein paar MB.

4

Besorgen Sie sich die .NET memory profiler, wenn Sie genau sehen möchten, was diesen Speicher beansprucht.

3

Programme, die mit dem .NET-Framework geschrieben wurden, haben einen höheren Aufwand.

2

Sorgen Sie sich nicht um den Speicherverbrauch für eine Hello World App.

Eine verwaltete Sprachanwendung behandelt ihre Speichernutzung anders als beispielsweise C, wobei jede Speicherzuweisung das Risiko birgt, nicht freigegeben zu werden. In einigen Fällen läuft eine .NET-App möglicherweise sogar schneller als eine entsprechende in C++ geschriebene App, wenn die App viel Zeit in malloc/dealloc verbringt, da die CLR das Freigeben/Garbage Collecting aufheben kann, bis die App inaktiv ist.