Le jeu de travail d'une application est rognée lorsque sa fenêtre de niveau supérieur est réduit

Traductions disponibles Traductions disponibles
Numéro d'article: 293215 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Symptômes

Lorsque fenêtre de niveau supérieur une application est réduit via la commande réduire son menu système ou un clic sur le bouton Réduire , le système d'exploitation découper le jeu de travail pour le processus. Ceci est effectué pour libérer la mémoire vive (RAM) pour les applications de premier plan. En raison de cette limitation, un processus pouvez rencontrer beaucoup et des performances réduites car ses pages de mémoire sont en cours défectueuses en mémoire vive (RAM).

Plus d'informations

Si une application réduit la fenêtre de niveau supérieur par programmation en appelant l'API ShowWindow() avec la commande SW_MINIMIZE, l'ensemble du processus de travail est supprimé. Toutefois, la plage de travail définie va pas être supprimés lorsque la fenêtre est réduite par programmation via l'utilisation de ShowWindow() avec la commande SW_SHOWMINIMIZED.

Le jeu de travail d'un processus est l'ensemble de pages de mémoire actuellement visibles pour le processus dans la RAM physique. Accès à cette mémoire est très rapide car les pages sont résidentes et disponibles pour une application d'utiliser sans déclencher une défaillance de page.

Un processus pouvez explicitement découper son propre travailler ensemble en appelant l'API SetProcessWorkingSetSize() tout en transmettant valeur-1 pour le dwMinimumWorkingSetSize et le dwMaximumWorkingSetSize . Il s'agit essentiellement comment le système supprime le processus lorsque sa fenêtre de niveau supérieur est réduit. Cela ne signifie pas que les pages de mémoire utilisés par le processus sont immédiatement supprimées de mémoire vive (RAM). En fait, ces pages peuvent rester résidents pendant un certain temps. Ils sont simplement marqués afin que le système puissiez les utiliser pour les autres processus que nécessaire. Cette méthode est beaucoup plus rapide qu'attend algorithme rognage standard du système.

Lorsqu'une fenêtre est réduite via la commande réduire son menu système ou le bouton Réduire , la fenêtre est envoyée un message WM_SYSCOMMAND avec la commande SC_MINIMIZE. Si la procédure de fenêtre transfère ce message sur la procédure de fenêtre par défaut du système en appelant DefWindowProc(), la procédure par défaut va gérer le message en appelant ShowWindow() avec la commande SW_MINIMIZE. Comme nous l'avons vu, cela entraînera le processus de travail jeu à être supprimés.

Vous pouvez écrire une application qui peut être réduite sans avoir son jeu de travail supprimé. Pour ce faire, la procédure de fenêtre de la fenêtre de niveau supérieur doit intercepter le message WM_SYSCOMMAND et répondre à la commande SC_MINIMIZE par appel ShowWindow() directement avec la commande SW_SHOWMINIMIZED. Il ne passez pas la commande SC_MINIMIZE sur DefWindowProc().

Exemple de code

Le code suivant montre comment écrire une procédure de fenêtre intercepte le message WM_SYSCOMMAND à ignorer la procédure de fenêtre par défaut et empêcher le jeu de travail de processus d'être supprimés :
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);
}
				

Propriétés

Numéro d'article: 293215 - Dernière mise à jour: mardi 21 novembre 2006 - Version: 5.1
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Win32 Application Programming Interface sur le système suivant
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
Mots-clés : 
kbmt kbapi kbkernbase kbmemory kbprb KB293215 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 293215
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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