. NET Minimize to Tray UND Minimieren der erforderlichen Ressourcen

8

Ich habe eine WinForms-Anwendung (ich benutze VB), die in die Taskleiste minimiert werden kann. Ich habe die "Hackish" -Methoden verwendet, die in mehreren Beiträgen beschrieben wurden, die eine NotifyIcon verwenden und mit dem Form_Resize-Ereignis spielen.

Das alles funktioniert ästhetisch, aber die Ressourcen und der Speicher sind davon nicht betroffen. Ich möchte in der Lage sein, Ressourcen zu minimieren, wenn sie wie Visual Studio minimiert werden. Wenn Sie in Visual Studio codieren, kann die Speicherbelegung (abhängig von der Projektgröße) auf über 500 MB ansteigen, aber wenn Visual Studio auf die Taskleiste minimiert wird, sinkt der Speicher drastisch auf (was ich annehme) ist die minimale Menge .

Hat jemand eine Ahnung, wie das zu erreichen ist?

Hier ist eine kurze Beschreibung der Anwendung, wenn jemand sie relevant findet: Ich habe ein Windows-Formular mit einem ListView, das Arbeitsaufträge für meine IT-Abteilung enthält. Die Anwendung hat einen "Listener", der benachrichtigt, wenn ein neuer Arbeitsauftrag gesendet wird. Wenn die Anwendung in der Taskleiste ausgeführt wird, wird also nur die Anzahl der Elemente in der ListView mit einer Anzahl von Zeilen in einer SQL-Tabelle alle paar Minuten verglichen.

EDIT: Um genauer zu sein, ein Windows-Formular hat intrinsisch Threads und Ressourcen mit den Steuerelementen verwendet, wenn das Formular unsichtbar ist (in der Taskleiste) diese Ressourcen weiterhin verwendet werden. Was kann ich tun, um diese Ressourcen zu minimieren, ohne alle Steuerelemente zu löschen und neu zu zeichnen, wenn das Formular wiederhergestellt wird?

    
Joey 04.11.2008, 20:01
quelle

4 Antworten

8

Beim Aufrufen von MiniMizeMemory () wird eine Garbage Collection ausgeführt, die Prozessarbeitsgröße wird verkleinert und der Heap des Prozesses komprimiert.

%Vor%     
Jesse C. Slicer 04.11.2008, 21:14
quelle
3

Sie suchen wahrscheinlich nach diesem Funktionsaufruf: SetProcessWorkingSetSize

Wenn Sie den API-Aufruf SetProcessWorkingSetSize mit -1 als Argument ausführen, schneidet Windows den Arbeitssatz sofort ab.

Wenn jedoch der größte Teil des Speichers noch von Ressourcen belegt wird, die Sie nicht freigegeben haben, wird das Minimieren des Arbeitssatzes nichts bewirken. Dies könnte zusammen mit dem Vorschlag, Garbage Collection zu erzwingen, die beste Wahl sein.

In Ihrer Anwendungsbeschreibung möchten Sie möglicherweise auch überprüfen, wie viel Speicher der ListView verbraucht, sowie die Datenbankzugriffsobjekte. Ich weiß auch nicht, wie Sie diese Überwachungsdatenbankaufrufe durchführen. Möglicherweise möchten Sie dies in ein separates Objekt isolieren und vermeiden, dass Sie eines der Formulare bei minimierter Größe berühren, da das Programm andernfalls gezwungen ist, die Steuerelemente geladen und zugänglich zu halten. Sie könnten einen separaten Thread für die Überwachung starten und den ListView.Count als Parameter übergeben.

Einige Quellen:

.NET-Anwendungen und das Working Set

Wie viel Speicher verwendet meine .Net-Anwendung?

    
Esteban Brenes 04.11.2008 20:23
quelle
2

Um ungenutzten Speicher zu bereinigen, verwenden Sie GC.Collect () ... obwohl Sie sich darüber informieren sollten, warum und warum es normalerweise eine schlechte Idee ist, es häufig zu verwenden.

Wenn Sie andere Ressourcen meinen, müssen Sie genauer sein.

    
StingyJack 04.11.2008 20:09
quelle
0

Wenn dies in C # ist, sehen Sie sich den Quellcode an, damit werden alle Probleme gelöst, die Sie haben:

Ссылка

    
TheUberOverLord 17.11.2008 22:39
quelle