El conjunto de trabajo de una aplicación se recorta cuando se minimiza la ventana de nivel superior

Seleccione idioma Seleccione idioma
Id. de artículo: 293215 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Si mediante el comando Minimizar desde su menú de sistema o hacer clic en el botón Minimizar de ventana de nivel superior de una aplicación está minimizada, el sistema operativo se recorte el conjunto de trabajo para el proceso. Esto se hace para liberar memoria RAM para las aplicaciones de primer plano. Como resultado de este recorte, un proceso puede experimentar rendimiento bastante peor debido a sus páginas de memoria que se generó un error en la RAM.

Más información

Si una aplicación minimiza su ventana de nivel superior mediante programación llamando a la API ShowWindow() con el comando SW_MINIMIZE, se eliminarán el conjunto de trabajo del proceso. Sin embargo, el trabajo establece no se recorta cuando la ventana está minimizada mediante programación a través del uso de ShowWindow() con el comando SW_SHOWMINIMIZED.

El conjunto de trabajo de un proceso es el conjunto de páginas de memoria visibles actualmente en el proceso en la RAM físico. Acceso a esta memoria es muy rápido porque las páginas son residentes y están disponibles para una aplicación las utilice sin desencadenar un error de página.

Un proceso puede recortar explícitamente su propio trabajo conjunto llamando a la API SetProcessWorkingSetSize() al pasar "-1" para los dwMinimumWorkingSetSize dwMaximumWorkingSetSize parámetros y. Esto es esencialmente cómo el sistema recorta el proceso cuando se minimiza la ventana de nivel superior. Esto no significa que las páginas de memoria utilizadas por el proceso se descartan inmediatamente desde la RAM. De hecho, estas páginas pueden permanecer residentes bastante. Simplemente se marcará para que el sistema puede utilizarlas para otros procesos según sea necesario. Esto es considerablemente más rápido que espera en el algoritmo de recorte estándar del sistema.

Cuando una ventana está minimizada mediante el comando Minimizar en su menú de sistema o el botón Minimizar , la ventana se envía un mensaje WM_SYSCOMMAND con el comando SC_MINIMIZE. Si el procedimiento de ventana pasa este mensaje al procedimiento de ventana predeterminado del sistema por DefWindowProc() llamada, el procedimiento predeterminado controlará el mensaje de llamada ShowWindow() con el comando SW_MINIMIZE. Como se indicó anteriormente, esto hará que el proceso conjunto se recortan de trabajo.

Puede escribir una aplicación que se puede minimizar sin necesidad de su conjunto de trabajo que se recorta. Para ello, el procedimiento de ventana de la ventana de nivel superior debe interceptar el mensaje WM_SYSCOMMAND y responder al comando SC_MINIMIZE por llamada ShowWindow() directamente con el comando SW_SHOWMINIMIZED. No debe pasar el comando SC_MINIMIZE en DefWindowProc().

Código de ejemplo

El código siguiente muestra cómo escribir un procedimiento de ventana que intercepta el mensaje WM_SYSCOMMAND para omitir el procedimiento de ventana predeterminado e impedir que el conjunto de trabajo de proceso que se recortan:
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);
}
				

Propiedades

Id. de artículo: 293215 - Última revisión: martes, 21 de noviembre de 2006 - Versión: 5.1
La información de este artículo se refiere a:
  • Microsoft Win32 Application Programming Interface sobre las siguientes plataformas
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
Palabras clave: 
kbmt kbapi kbkernbase kbmemory kbprb KB293215 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 293215

Enviar comentarios

 

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