Die Arbeitsseiten einer Anwendung werden beim Minimieren des übergeordneten Fensters gekürzt

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 293215 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
293215 The working set of an application is trimmed when its top-level window is minimized
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Wenn das übergeordnete Fenster einer Anwendung über den Befehl Minimieren im Systemmenü oder durch Klicken auf die Schaltfläche Minimieren minimiert wird, werden die Arbeitsseiten für den Prozess vom Betriebssystem gekürzt. Auf diese Weise wird RAM-Speicher für die Anwendungen im Vordergrund freigegeben. Die Leistung eines Prozesses kann infolgedessen wesentlich herabgesetzt sein, da die Speicherseiten fehlerhaft in den RAM zurückgegeben werden.

Weitere Informationen

Wenn ein übergeordnetes Fenster einer Anwendung von dieser selbst programmatisch durch Aufrufen der ShowWindow()-API mit dem Befehl SW_MINIMIZE minimiert wird, werden die Arbeitsseiten für den Prozess gekürzt. Die Arbeitsseiten werden jedoch nicht gekürzt, wenn das Fenster programmatisch durch die Verwendung von ShowWindow() mit dem Befehl SW_SHOWMINIMIZED minimiert wird.

Die Arbeitsseiten eines Prozesses sind die Speicherseiten, die derzeit für den Prozess im physischen RAM sichtbar sind. Der Zugriff auf diesen Speicher ist sehr schnell, da die Seiten resident und für eine Anwendung verfügbar sind, ohne einen Fehler durch eine ungültige Seite auszulösen.

Ein Prozess kann seine eigenen Arbeitsseiten explizit kürzen, indem er die SetProcessWorkingSetSize()-API aufruft und "-1" für die Parameter dwMinimumWorkingSetSize und dwMaximumWorkingSetSize weitergibt. Auf diese Weise kürzt das System den Prozess, wenn das übergeordnete Fenster minimiert wird. Dies bedeutet nicht, dass die Speicherseiten, die von dem Prozess verwendet werden, sofort aus dem RAM gelöscht werden. Die Seiten bleiben noch eine ganze Weile bestehen. Sie werden nur gekennzeichnet, damit sie vom System bei Bedarf für andere Vorgänge verwendet werden können. Dies geht wesentlich schneller als auf den standardmäßigen Kürzungsalgorithmus des Systems zu warten.

Wenn ein Fenster über den Befehl Minimieren im Systemmenü oder über die Schaltfläche Minimieren minimiert wird, erhält das Fenster eine WM_SYSCOMMAND-Meldung mit dem Befehl SC_MINIMIZE. Wenn die Fensterprozedur diese Meldung an die standardmäßige Fensterprozedur des Systems weitergibt, indem sie DefWindowProc() aufruft, verarbeitet die standardmäßige Prozedur die Meldung, indem sie ShowWindow() mit dem Befehl SW_MINIMIZE aufruft. Wie bereits erwähnt, werden die Arbeitsseiten für den Prozess daraufhin gekürzt.

Sie können eine Anwendung schreiben, die minimiert werden kann, ohne dass die Arbeitsseiten gekürzt werden. Hierzu sollte die Fensterprozedur für das übergeordnete Fenster die Meldung WM_SYSCOMMAND abfangen und auf den Befehl SC_MINIMIZE antworten, indem sie ShowWindow() direkt mit dem Befehl SW_SHOWMINIMIZED aufruft. Der Befehl SC_MINIMIZE sollte nicht an DefWindowProc() weitergegeben werden.

Beispielcode

Das folgende Codebeispiel zeigt, wie Sie eine Fensterprozedur schreiben, die die Meldung WM_SYSCOMMAND abfängt, um die standardmäßige Fensterprozedur zu umgehen und zu verhindern, dass die Arbeitsseiten für den Prozess gekürzt werden:
LRESULT CALLBACK WndProc (HWND hWnd, UINT iMsg, WPARAM wParam, 
      LPARAM lParam) {

   switch (iMsg) {

      case WM_SYSCOMMAND:
         if (wParam == SC_MINIMIZE) {

            // programmatically minimize the window
            ShowWindow(hWnd, SW_SHOWMINIMIZED);

            // do not pass the minimize command on to the system's
            // default window procedure
            return 0;
         }

         // allow other system commands to be passed on to the
         // default window procedure
         break; 

      // handle other window messages here...
      case WM_WHATEVER:
         break;
   }

   return DefWindowProc(hWnd, iMsg, wParam, lParam);
}
				

Eigenschaften

Artikel-ID: 293215 - Geändert am: Donnerstag, 10. Januar 2008 - Version: 5.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Win32 Application Programming Interface, wenn verwendet mit:
    • Microsoft Windows NT 4.0
    • Microsoft Windows 2000 Standard Edition
    • Microsoft Windows XP Professional
Keywords: 
kbapi kbmemory kbkernbase kbprb KB293215
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com