AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Speicherfreigabe beim Minimieren
Thema durchsuchen
Ansicht
Themen-Optionen

Speicherfreigabe beim Minimieren

Ein Thema von fajac · begonnen am 25. Aug 2009 · letzter Beitrag vom 1. Sep 2009
Antwort Antwort
fajac

Registriert seit: 1. Jul 2009
60 Beiträge
 
#1

Speicherfreigabe beim Minimieren

  Alt 25. Aug 2009, 15:51
Hallo Gemeinde,

Ich habe folgendes Problem:

Meine Applikation nutzt eine Dritt-Hersteller-Komponente, deren Speicherbedarf seit dem letzten Update stark angewachsen ist. Da meine App auf einem Terminalserver mit vielen Instanzen läuft, ist das ein Problem.
Nun ist unter XP folgendes Phänomen zu beobachten: Wenn eine Applikation minimiert wird, sinkt der Speicherbedarf rapide ab. So auch in diesem Fall. Mehr noch, wenn ich wieder maximiere, ist der Speicherbedarf zwar wieder größer, aber das in erträglichem Ausmass.
Ein bisschen Herumexperimentieren am Entwicklerrechner brachte heraus, dass programmatisches Minimieren mit Application.Minimize und Application.Restore ebenfalls diesen Effekt zeitigt. Wenn man ein WM_SYSCOMMAND(wParam=SC_MINIMIZE) schickt, minimiert sich die App auch, und der Speicher ist frei. Wenn ich die Nachricht aber abfange, um das Minimieren zu verhindern, passiert nichts...

Leider kann ich meine App nicht minimieren, wenn ein Kunde am Terminalserver damit arbeitet. Nun also zur Frage:

Kann man dieses Speicherverhalten irgendwie simulieren? Irgendwie muss Windows der Applikation nach dem Minimieren doch mitteilen, dass sie ihren Speicher aufräumen kann.

Ich hoffe, ich habe mich verständlich ausgedrückt...stehe völlig auf dem Schlauch, hat jemand eine Idee?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Speicherfreigabe beim Minimieren

  Alt 25. Aug 2009, 15:53
Vergiss diese Informationen des Taskmanagers. Falls am TS zu wenig Speicher verfügbar ist wird Windows schon dafür sorgen das entsprechende aktuell nicht verwendet Speicherseiten ausgelagert werden. Beim minimieren schmeiß halt Windows einiges aus dem RAM da vermutlich die App einige Sekunden nicht benötigt wird.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#3

Re: Speicherfreigabe beim Minimieren

  Alt 25. Aug 2009, 16:09
Hi,

Bernhard hat absolut recht! Um das ganze auch technisch zu untermauern, sprich den Unterschied zwischen tatsächlicher Speichernutzung und dem Working Set zu erklären, hier ein paar Links:

http://support.microsoft.com/default...b;en-us;293215
http://discuss.joelonsoftware.com/de...et.12.321050.8
http://www.codecomments.com/archive3...-7-542375.html

Als Ergebnis wirst Du feststellen, daß Du dieses Verhalten beim Minimieren - das Reduzieren des Working Set - auch per Code lösen kannst, aber dadurch unter Umständen zwar den Speichern "optimierst", aber "signifikant" Performance einbüßt (MS KB).

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat
fajac

Registriert seit: 1. Jul 2009
60 Beiträge
 
#4

Re: Speicherfreigabe beim Minimieren

  Alt 26. Aug 2009, 09:35
Vielen Dank für eure Antworten und Anregungen! Ihr habt mir sehr geholfen.
  Mit Zitat antworten Zitat
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#5

Re: Speicherfreigabe beim Minimieren

  Alt 26. Aug 2009, 18:25
Hi fajac,

Zitat von fajac:
Vielen Dank für eure Antworten und Anregungen! Ihr habt mir sehr geholfen.
Das freut zu hören, ich spreche bestimmt auch für Bernhard, wenn ich sage: Bitte, gerne!

Gruß,
Assertor

Frederik
  Mit Zitat antworten Zitat
fajac

Registriert seit: 1. Jul 2009
60 Beiträge
 
#6

Re: Speicherfreigabe beim Minimieren

  Alt 1. Sep 2009, 16:12
Ich komme nochmal auf das Thema zurück, weil sich ein neuer Sachverhalt ergeben hat:

Zunächst hatten wir beschlossen, die Sache auf sich beruhen zu lassen und nichts weiter zu tun, wie die in diesem Thread genannten Links es nahelegen. Nun haben wir allerdings getestet, wie sich unser TerminalServer verhält, wenn sich viele Cients anmelden. Erwartet hätten wir, dass, wenn der Speicher knapp wird, das WorkingSet der anderen Prozesse getrimt wird (wie es Minimize / Restore oder die Api SetProcessWorkingSetSize auch tun), um Speicher für neue Prozesse freizubekommen.
Leider ist das nicht der Fall. Der Rechner fängt statt dessen an, Speicher auszulagern, was die Geschwindigkeit nicht unbeträchtlich verringert .

Nun zur Frage: Weiss jemand, ob bzw. wie man einen Rechner dazu "überreden" kann, bei Mangel an freiem Arbeitsspeicher sich zuerst bei anderen Prozessen zu bedienen und erst, wenn das nichts mehr bringt, auszulagern?
Bis ich dazu etwas herausfinde, muss ich mir damit behelfen, die o.g. Api zyklisch aufzurufen, was ja eigentlich nicht empfohlen wird.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Speicherfreigabe beim Minimieren

  Alt 1. Sep 2009, 16:16
Habt ihre einen "echten" TS-Server oder "nur" einen Aufsatz wie Citrix? Falls Citrix: Sind alle Updates eingespielt? Hier gibt es des öftern auch Fehler die sich nach Einspielen einer aktuellen Version in Luft auflösen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
fajac

Registriert seit: 1. Jul 2009
60 Beiträge
 
#8

Re: Speicherfreigabe beim Minimieren

  Alt 1. Sep 2009, 16:19
Wir haben einen echten TS...wegen des im Test verwendeten OS muss ich nachfragen.
Das System läuft auf einem ESX-Server, d.h. im Grunde als virtuelle Maschine.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Speicherfreigabe beim Minimieren

  Alt 1. Sep 2009, 16:24
Bekommt das OS vom Virtualisierer u.U. mehr Speicher "mitgeteilt" als physikalisch vorhanden und der Virtualisierer fängt das Swappen an
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz