Windows 8 和 Windows Server 2012 上的任务计划程序性能不佳

Windows 8 和 Windows Server 2012 上的任务计划程序性能不佳

我正在使用 Windows 任务计划程序在用户登录时启动提升的管理员程序。该技术基于这篇文章:

http://www.sevenforums.com/tutorials/11949-elevated-program-shortcut-without-uac-prompt-create.html

注意:提升管理员权限的程序是自动化测试程序,需要以管理员身份运行才能安装程序并运行各种测试。部分测试需要管理员权限和桌面访问权限。

该任务配置为以高于正常优先级运行,如本文所述:

https://stackoverflow.com/questions/2427142/is-there-any-way-for-a-win2k8-scheduled-task-to-have-normal-priority-io

在 Windows Vista、Windows 7 和 Windows Server 2008 上一切运行正常。

在 Windows 8 和 Windows Server 2012 上,测试程序的性能非常糟糕,通常需要 5 到 10 倍的时间才能运行。CPU 使用率和磁盘 I/O 都非常高。Process Hacker (http://processhacker.sourceforge.net/) 显示 I/O 优先级为正常,页面优先级也为正常。

只有在登录期间通过任务调度程序运行测试程序时,才会出现性能不佳的情况。如果我停止测试程序并通过手动运行任务调度程序任务重新启动它,则恢复正常性能。

以下是精简版测试程序的一些数字:

  • 从用户登录运行的测试程序:时间 37.6 秒,页面错误 4530,峰值 WS 17.8M
  • 手动重启后相同的测试程序:时间 1.1 秒,页面错误 4383,峰值 WS 17.7M

任何帮助,将不胜感激。

答案1

我认为我找到了解决这个问题的方法。看来 Windows 8 和 Windows Server 2012 上的计划任务的行为取决于任务相对于登录顺序的启动时间。

我的测试任务内置了延迟。任务在登录序列的早期启动,暂停 60 秒,然后开始测试运行。尝试了各种延迟,但在所有情况下,Windows 8 和 Windows 2012 上的性能都很糟糕。注意:测试任务是在几乎全新安装的 Windows 中运行的,因此 60 秒足以通过登录序列。

我更改了测试任务以删除内置延迟,而是使用任务计划程序的启动延迟功能。在 Windows 8 和 Windows Server 2012 上,测试任务配置为登录后 60 秒启动。进行此更改后,测试任务正常运行。

我已经在 MSFT 文档中搜索了此行为的解释,但至今一无所获。

非常感谢@charleswj81、@MDMarra 和@Daniel Goldberg。你们的评论帮助我从不同角度看待问题,并最终找到解决方法。

相关内容