LabVIEWForum.de - Sonderbare Speicherauslastung

LabVIEWForum.de

Normale Version: Sonderbare Speicherauslastung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich habe ein Programm erstellt zur Kommunikation über CAN mit einem Gerät. Wenn ich nun das Programm, also die Executable, starte, belegt es knapp 50 MB, minimiere ich es belegt es nur noch 7 MB und nach erneutem maximieren sind es etwa 12 MB. Egal was ich danach mache, bspw. Messdaten speichern, Konfigurationen speicher oder lade, ich komme nich mehr auf die 50 MB. Hat jemand einen Erkälungsansatz hierfür?
' schrieb:Hallo,

ich habe ein Programm erstellt zur Kommunikation über CAN mit einem Gerät. Wenn ich nun das Programm, also die Executable, starte, belegt es knapp 50 MB, minimiere ich es belegt es nur noch 7 MB und nach erneutem maximieren sind es etwa 12 MB. Egal was ich danach mache, bspw. Messdaten speichern, Konfigurationen speicher oder lade, ich komme nich mehr auf die 50 MB. Hat jemand einen Erkälungsansatz hierfür?

ggf. werden Teile des Programms beim Minimieren in die Auslagerungs-Datei geschrieben?

(is nur geraten ...)
' schrieb:ggf. werden Teile des Programms beim Minimieren in die Auslagerungs-Datei geschrieben?

(is nur geraten ...)

Auslagerungsdatei ändert sich durch Minimieren nur um ein paar KB. Soweit ich das überblicken kann funktioniert auch alles weiterhin tadellos.
Vielleicht räumt LV beim Minimieren mal seinen Speicher richtig auf.
' schrieb:Vielleicht räumt LV beim Minimieren mal seinen Speicher richtig auf.

Hab das gerade mit anderen Appliaktionen, die im Einsatz an Prüfständen sind, verglichen und konnte bei keiner ein ähnliches Verhalten festellen. Dazu muss ich allerdings sagen, dass ich im Gegensatz zu diesem Programm, alle anderen noch mit 8.5.1 erstellt habe.
' schrieb:Hallo,

ich habe ein Programm erstellt zur Kommunikation über CAN mit einem Gerät. Wenn ich nun das Programm, also die Executable, starte, belegt es knapp 50 MB, minimiere ich es belegt es nur noch 7 MB und nach erneutem maximieren sind es etwa 12 MB. Egal was ich danach mache, bspw. Messdaten speichern, Konfigurationen speicher oder lade, ich komme nich mehr auf die 50 MB. Hat jemand einen Erkälungsansatz hierfür?
Evt. hilft dir dieser Thread weiter: Welches Feature ist denn das?
Kann weder im Taskmanager noch im Process Exploerer bis auf den Speicher irgendwelche Auffälligkeiten feststellen.

Hab das ganze mal an NI geschickt.
' schrieb:Hallo,

ich habe ein Programm erstellt zur Kommunikation über CAN mit einem Gerät. Wenn ich nun das Programm, also die Executable, starte, belegt es knapp 50 MB, minimiere ich es belegt es nur noch 7 MB und nach erneutem maximieren sind es etwa 12 MB. Egal was ich danach mache, bspw. Messdaten speichern, Konfigurationen speicher oder lade, ich komme nich mehr auf die 50 MB. Hat jemand einen Erkälungsansatz hierfür?

Das ist ein Windows Feature! Hatte ich auch kürzlich aber dann noch etwas hässlicher wo ich einen DLL Treiber verwendete der jedesmal beim Öffnen 4MB Speicher allozierte. Aus verschiedenen Gründen war es aber sinnvoll diesen Treiber regelmässig abzuschliessen. Wenn man denn das Hauptwindow minimized hat ging der allozierte Speicher im Taskmanager auf phänomenale 6MB zurück um beim erneuten darstellen wieder etwas hochzuspringen und dann bei jedem neuen Öffnen des Treibers wiederum um 4MB anzusteigen. Leider musste diese Applikation aber ohne Benützer Tage lang laufen können, so dass ein regelmässiges manuelles Minimize nicht sinnvoll war.

Nach viel rumprobieren und suchen habe ich diesen Verweis bei Microsoft gefunden. Der erklärt alles und es hat tatsächlich damit zu tun dass Windows bei einem manuellen Minimize, nicht aber beim Aufruf des ShowWindow(hwnd, SW_SHOWMINIMIZED) APIs das Workingset der Applikation reduziert indem alles was zurzeit nicht mehr gebraucht wird aus dem Speicher gepaged wird. Der Treiber schien also irgendwie Speicher alloziert zu haben beim Öffnen, auf eine Weise die beim Freigeben nicht direkt eine komplette Freigabe des Speichers zur Folge hatte indem der Speicher für Wiederverwendung reserviert blieb aber diese Wiederverwendung fand nie statt.

LabVIEW alloziert beim Aufstarten und auch beim Öffnen von VIs ziemlich viel Speicher für alles mögliche. Dieser Speicher wird zwar auf LabVIEW Ebene wieder freigegeben wenn er nicht mehr verwendet wird aber Windows scheint da den einmal allozierten Speicher nicht automatisch wieder freizumachen ausser wenn das Workingset explizit reduziert wird.

Rolf Kalbermatter
Vielen Dank für die Mühe.
Ich hielt es für sehr unwahrscheinlich, dass Windows durch bloßes Minimieren eines Panels Speicher freigibt. Wenn ich es richtig verstanden habe, kann ich also unbesorgt sein, da ja meine Applikation nie mehr als ca. 50 MB alloziert.
Referenz-URLs