15.01.2009, 09:18
Beitrag #1
|
|
|
15.01.2009, 10:12
Beitrag #2
|
cb
LVF-SeniorMod
Beiträge: 1.731
Registriert seit: Feb 2006
2018SP1
2001
EN
40xxx
Deutschland
|
Sonderbare Speicherauslastung
' 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 ...)
|
|
|
15.01.2009, 10:30
Beitrag #3
|
|
|
15.01.2009, 10:34
Beitrag #4
|
|
|
15.01.2009, 10:54
Beitrag #5
|
|
|
15.01.2009, 11:07
Beitrag #6
|
|
|
15.01.2009, 13:29
Beitrag #7
|
|
|
16.01.2009, 13:50
(Dieser Beitrag wurde zuletzt bearbeitet: 16.01.2009 13:54 von rolfk.)
Beitrag #8
|
rolfk
LVF-Guru
Beiträge: 2.306
Registriert seit: Jun 2007
alle seit 6.0
1992
EN
2901GG
Niederlande
|
Sonderbare Speicherauslastung
' 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
|
|
|
16.01.2009, 14:35
Beitrag #9
|
|
|
| |