应用程序的工作集剪裁时其顶级窗口已最小化

文章翻译 文章翻译
文章编号: 293215 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

症状

当通过从其 系统 菜单或其 最小化 按钮上的单击 最小化 命令,应用程序的顶级窗口已最小化时,操作系统将剪裁为进程工作集。这是为了释放内存的前景色应用程序。由于此修整,而导致的进程可能会遇到明显较差的性能,因为其内存页被出现故障回内存。

更多信息

如果应用程序及其顶级窗口缩至最小以编程方式通过调用 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 命令。它不应将传递到 DefWindowProc() SC_MINIMIZE 命令。

示例代码

下面的代码演示如何编写截获 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
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 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