Il working set di un'applicazione viene tagliato quando è ridotto a icona la finestra di primo livello

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 293215
Sintomi
Quando è ridotto a icona finestra principale di un'applicazione tramite il comando Riduci a icona dal relativo menu di sistema o un clic sul relativo pulsante di riduzione a icona , il sistema operativo verrà ritagliare il working set per il processo. Questa operazione viene eseguita per liberare RAM per le applicazioni in primo piano. Come risultato di questa operazione di taglio, un processo potrebbe verificarsi prestazioni inferiori in modo significativo in quanto le pagine di memoria sono la non riuscite in RAM.
Informazioni
Se un'applicazione riduce la finestra di primo livello a livello di programmazione chiamando l'API ShowWindow() con il comando SW_MINIMIZE, working set del processo verrà ritagliato. Tuttavia, la working set verrà non essere tagliato quando la finestra è ridotta a livello di programmazione icona tramite l'utilizzo di ShowWindow() con il comando SW_SHOWMINIMIZED.

Il working set di un processo è l'insieme di pagine di memoria attualmente visibili al processo nella memoria RAM fisica. Accesso a questa memoria è molto rapido poiché le pagine sono residenti e disponibili per un'applicazione senza originare un errore di pagina.

Un processo può in modo esplicito ritagliare il proprio utilizzo insieme chiamando l'API SetProcessWorkingSetSize() durante il passaggio "-1" per i parametri di dwMinimumWorkingSetSize e il dwMaximumWorkingSetSize . Questo è essenzialmente come il sistema riduce il processo quando è ridotto a icona la finestra di primo livello. Ciò non significa che le pagine di memoria utilizzate dal processo vengono immediatamente eliminate dalla RAM. Infatti, queste pagine potrebbero rimanere residente per molto tempo. Sono semplicemente vengono contrassegnate in modo che il sistema può utilizzare per altri processi, se necessario. Questo è notevolmente più veloce in attesa di algoritmo di rimozione standard del sistema della.

Quando una finestra è ridotta a icona tramite il comando Riduci a icona dal relativo menu di sistema o il pulsante Riduci a icona , la finestra viene inviata un messaggio di WM_SYSCOMMAND con il comando SC_MINIMIZE. Se la routine di finestra passa questo messaggio alle routine di finestra predefinita del sistema dal chiamante DefWindowProc(), è necessario che la routine predefinita gestirà il messaggio di chiamata ShowWindow() con il comando SW_MINIMIZE. Come affermato in precedenza, in questo modo il processo working set per essere tagliato.

È possibile scrivere un'applicazione che può essere ridotta a icona senza working set tagliato. A tal fine, la procedura di finestra per la finestra di primo livello deve intercettare il messaggio WM_SYSCOMMAND e rispondere al comando SC_MINIMIZE dal chiamante ShowWindow() direttamente con il comando SW_SHOWMINIMIZED. Non dovrà passare il comando SC_MINIMIZE a DefWindowProc().

Codice di esempio

Il codice riportato di seguito viene illustrato come scrivere una routine finestra che consente di intercetta il messaggio WM_SYSCOMMAND per ignorare la routine di finestra predefinita e impedire che il processo working set viene tagliato:
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);}				

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 293215 - Ultima revisione: 11/21/2006 15:36:05 - Revisione: 5.1

Microsoft Win32 Application Programming Interface

  • kbmt kbapi kbkernbase kbmemory kbprb KB293215 KbMtit
Feedback