應用程式的工作集被修剪其最上層的視窗最小化之後

文章翻譯 文章翻譯
文章編號: 293215 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

徵狀

當應用程式的最上層的視窗最小化透過其 系統 功能表或在其 最小化] 按鈕上的按一下滑鼠上的 [最小化] 指令時,作業系統會修剪程序的工作組。這麼做是為了釋出 RAM 的前景應用程式。這個調整的結果處理程序可能會遇到大幅差的效能,因為其記憶體頁面會被錯誤進入 RAM。

其他相關資訊

如果應用程式其最上層視窗最小化以程式設計方式藉由呼叫 ShowWindow() API 以 SW_MINIMIZE 指令,將修剪程序的工作集。但是,工作設定將 當視窗最小化以程式設計的方式時透過 ShowWindow() 的使用以 SW_SHOWMINIMIZED 命令修剪。

處理程序的工作集是目前可見到實體 RAM 中處理程序的記憶體頁面組。因為分頁是常駐的而且可應用程式使用而不觸發分頁錯誤,有非常快速此記憶體的存取。

處理程序明確可以藉由呼叫 SetProcessWorkingSetSize() API 時 dwMinimumWorkingSetSizedwMaximumWorkingSetSize 參數傳遞"-1"修剪自己的工作集。這基本上是會如何系統修剪程序時其最上層的視窗最小化。這並不表示處理序所使用的記憶體頁面會立即被捨棄從 RAM。在實際上這些網頁可能仍會常駐相當一段時間。它們只被標示,以便系統視其他處理程序可以將它們。這會比在等候系統的標準修剪演算法更快。

當視窗最小化透過其 系統 功能表] 或 [最小化] 按鈕上的 [最小化] 指令時,視窗就會傳送 SC_MINIMIZE 命令上的 WM_SYSCOMMAND 訊息。如果視窗程序所呼叫的 DefWindowProc() 通過這封郵件到系統的預設視窗程序,預設程序將會處理由呼叫 ShowWindow() 以 SW_MINIMIZE 命令訊息。如稍早所述,這會造成處理程序工作組修剪。

您可以撰寫可以最小化而不需修剪其工作集的應用程式。如果要執行這項操作的最上層的視窗,視窗程序應該攔截 WM_SYSCOMMAND 訊息和回應由呼叫 ShowWindow() SC_MINIMIZE 命令直接及 SW_SHOWMINIMIZED 命令。它不應該傳遞 SC_MINIMIZE 命令來 DefWindowProc() 上。

範例程式碼

下列程式碼會示範如何撰寫會攔截 WM_SYSCOMMAND 訊息以略過預設視窗程序,以避免處理序工作集所修剪的視窗程序:
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);
}
				

屬性

文章編號: 293215 - 上次校閱: 2006年11月21日 - 版次: 5.1
這篇文章中的資訊適用於:
  • Microsoft Win32 Application Programming Interface?應用於:
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
關鍵字:?
kbmt kbapi kbkernbase kbmemory kbprb KB293215 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:293215
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

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