即使没有窗口焦点,如何让 Microsoft Excel 也保持全速运行?

即使没有窗口焦点,如何让 Microsoft Excel 也保持全速运行?

我注意到,当 Excel 2007(可能还有更早的版本)具有窗口焦点时,Excel 会全速运行,这意味着文件打开速度很快,并且长时间运行的 VBA 宏执行速度很快。

如果 Excel 窗口失去焦点,Excel 的线程优先级似乎会急剧下降,并且在移动焦点时打开的大文件打开速度会很慢,而复杂的 VBA 宏则会长的完成的时间。

有没有什么办法,无论 Excel 是否获得焦点,都能保持其较高的优先级?

我知道我可以通过任务管理器人为地提高线程优先级,但我不确定这会对我的电子表格或操作系统产生什么连锁影响。

我的系统是快速双核处理器,配备 4GB RAM,运行 Vista 64。

编辑澄清:

我的问题不仅仅是通过任务管理器提高 Excel 进程的优先级,因为这仅有的当 Excel 具有窗口焦点时会影响它。

重点在于当 Excel 失去窗口焦点时会发生什么。

通过广泛使用 Excel,我们发现,通过设计,当Excel窗口没有获得焦点时,它会故意降低自身的进程优先级。

为 Excel 进程设置更高的优先级并不能阻止这种情况的发生 - 它只会在 Excel 具有焦点时赋予其更高的进程优先级,但当失去焦点时,优先级仍然会急剧下降。

在正常的 Excel 使用中(大概 99% 的人都在使用),您不会注意到这种效果,但对于大型电子表格(我认为大约有 2000 个工作表)和需要几分钟才能执行的复杂 VBA 宏,效果非常明显。

理想情况下,无论 Excel 窗口是否获得焦点,我都需要它保持相同的线程优先级。

到目前为止,我在处理过程中只是坐在电脑前几分钟,这样我就不会在 Excel 正在处理时意外点击关闭窗口,但我只是希望有一个更好的解决方案......也许是某种注册表黑客?

编辑:

我在网上只发现过一次提到这个问题此链接

这是相关的引用...

但是,如果我让 Excel 2000 窗口对用户可见,并且使窗口保持焦点,则宏将以预期速度执行。同样,窗口必须具有焦点,否则宏将再次变得缓慢。

答案1

Windows 非服务器版本默认提供优先级提升到前台进程。当您将 Excel 推到后台时,它会失去之前在前台的优先权;而其他程序则会获得优先权。

您可以更改设置,使程序不再获得此提升。注意:这不仅会影响 Excel,还会影响任何原本有资格获得提升的程序。

以下是在 Windows XP 中调整设置的方法:

  1. 右键点击我的电脑
  2. 选择特性
  3. 点击先进的标签。
  4. 在里面表现面板上,点击设置按钮。
  5. 点击先进的选项卡。第一个面板是处理器调度

    处理器调度面板

  6. 将其从默认的“程序”更改为“后台服务”,这样 Excel 在后台运行时的行为应该更接近您想要的方式。

答案2

我认为将 Excel 进程优先级更改为超出正常水平就你的情况而言。这应该不是问题。

不要这样做最高,它将与系统进程竞争。
不要暂停或者你也可以在上面悬挂其他东西!


如果你使用马克·鲁西诺维奇进程探索器
查看系统上运行的进程的优先级。
它显示以下优先级值及其关联。

24 Realtime
13 High         : procexp.exe itself is here, with winlogon, csrss
11              : smss is actually at 11
10 Above Normal :
 9              : lsass, services.exe are here
 8 Normal       : Most things are here
 6 Below Normal
 4 Idle

你可以使用进程探索器并尝试重新确定优先顺序Excel.
移至上方8,但不要超越12
超出正常水平10我希望如此。

同样,如果你认为某个进程在没有得到关注的情况下占用了太多的处理器时间,你可以降低它的优先级,直到闲置的
我通常使用这种技术。

答案3

这里有几个不同的事情需要考虑:当您更改进程的优先级时,该基本优先级将由其所有线程和它启动的其他进程继承。当前优先级由基本优先级和一些决定是否应提升的因素组成 - 处于前台本身并不一定能提升优先级,但退出等待状态或执行某些 IO 等操作可以带来短暂的临时提升。

我建议在处理这些非常密集的工作簿时,以高优先级运行 Excel 进程可能很有意义,而且我认为第二个快捷方式“高优先级 Excel”可能是实现此目的的好方法。首先创建一个一行批处理文件,使用适当的开关运行启动命令,例如:

start "high priority excel" /max /high "C:\Program Files\Microsoft Office\Office12\EXCEL.EXE"

(在 64 位版本的 Windows 上,除非start "high priority excel" /max /high "C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE"您还运行 64 位版本的 Office,该版本仅适用于 2010 年及以后的版本start "high priority excel" /max /high "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE")请注意,窗口的标题可以是任何您喜欢的内容,但不是可选的。

现在将其保存为 HiperExcel.cmd 等方便的位置 - 可能是 office 文件夹,或 ac:\scripts 文件夹或类似文件夹,或您的主文件夹,以便它可以在各个机器之间漫游。创建一个指向此文件的新快捷方式,将起始文件夹设为保存该文件的文件夹。为文件选择一个图标 - 浏览到 Excel.exe 可执行文件,然后选择与通常的 Excel 图标不同的图标为了清晰起见。

单击您的新快捷方式,它将调用 Excel 作为高优先级进程运行,基本优先级为 13,运行时它可能获得非实时进程的最高优先级 15。即使其他进程获得提升,也不应该获得更高的优先级。请注意,前台进程不会因为处于前台而获得优先级提升(自 NT4.0 以来)。那么发生了什么?

回顾一下我们目前所知道的内容:进程可以根据优先级轮流,但并不完全排除优先级较低的进程(好吧,实际上是线程,但为了便于讨论,我们只讨论进程)。当一个进程轮到它时会发生什么?它会运行一个称为量子的时间单位。量子有多长?这取决于……

此时前台进程可以使用更多资源 - 当它获得机会时,该机会可以比后台进程的轮次持续三倍。因此,它可能不会经常获得机会(取决于优先级),但当它获得机会时,它会占用更长时间。

您可以选择使用短或长量子(工作站操作系统上的默认量子为短,服务器上的默认量子为长),以及是否提升前台进程(对于 w/s 是可变的,对于服务器默认为固定的),以及如果提升,提升多少(实际上最多 3 倍)。现在,这其中的棘手部分是,如果您选择更改乘数,最终所有事物的量子值都非常短,而如果您禁用前台提升,所有事物的量子值都会更长但相等。当然,如果您禁用它,后台 Windows 服务将获得与您的用户应用程序相同的量子,这可能并不理想。您需要在注册表中设置值:HKLM\System\CurrentControlSet\Control\PriorityControl\Win32PrioritySeparation,使用位掩码。为了使事情变得简单,您最可能需要的值是:

2 = 默认值,表示使用默认值并最大程度地提升。工作站操作系统上的默认值较短且可变。8 = 固定、较短的量子(前台和后台相等)40(十进制,x28 十六进制)= 固定且较长(与服务器默认值相同)36(十进制,x24 十六进制)= 较短、可变但对前台进程的提升最小。我认为这是最能为您带来好处的方法,可以减少其他应用程序的竞争量,但允许 Excel 在前台获得更多资源(只要您也提高其优先级)。

尝试一下看看,我希望这会有所帮助 - 当然你的里程可能会有所不同。

另外:许多其他应用程序或进程并没有将 CPU 作为其瓶颈 - 您示例的 Outlook 同步和 IE 浏览可能有网络,并且对于 Outlook 来说,一些磁盘 IO 可能是其速度的更重要因素,因此无论它们是否获得前台提升,可见性能的影响可能低于您通过简单观察所看到的。

答案4

优先级操作可能不是由 Excel 完成的,而是由 Windows 本身完成的。Windows 有一种机制,其中窗口位于前景得到提升;因此,当 Excel 失去焦点时,其优先级会恢复正常(略低)。

我在 MSDN 上通过快速搜索找到的唯一关于此问题的页面是优先提升

当使用 的进程NORMAL_PRIORITY_CLASS被带到前台时,调度程序会提升与前台窗口关联的进程的优先级,使其大于或等于任何后台进程的优先级。当进程不再处于前台时,优先级将恢复到其原始设置。

据我所知,有办法可以禁用该优先级提升。

相关内容