我有一个3D应用程序需要大约每6ms生成一个新帧。该帧速率需要是恒定的,以便不会导致口吃。更糟糕的是,应用程序必须执行几个中等重量的计算(主要是准备3D场景并将数据复制到VRAM),因此它耗费了相当多的大约6毫秒来做它自己的东西。
这是一个问题,因为Windows在尝试将CPU用于其他事情时会导致我的应用程序断断续续。有什么方法可以让Windows不“放弃”其他进程的时间片吗?我并不担心它会对背景流程产生负面影响。
答案 0 :(得分:3)
Windows将允许您提高应用程序的优先级。进程通常只会丢失具有相同或更高优先级的其他进程的CPU时间,因此提高优先级可以防止CPU时间被盗[&34;
但请注意,如果你走得太远,你可以使系统不稳定,所以如果你要这样做,你通常只想提高一点点优先级,所以它比其他更高"正常"应用
另请注意,这不会产生巨大影响。如果您偶尔遇到小问题,提高优先级可能会处理问题。如果这是一个持续存在的问题,那么优先级提升可能不足以解决问题。
如果您决定尝试此操作,请参阅SetPriorityClass
和SetThreadPriority
。
答案 1 :(得分:0)
它通常取决于您的操作系统使用的调度算法。 Windows 7,8,XP,VISTA使用循环的多级队列调度,因此提高应用程序或线程或进程的优先级将满足您的需求。您目前正在使用哪个版本的Windows?..一旦我知道了
,我就可以帮助您答案 2 :(得分:0)
您可以提高您的流程优先级,但我认为它不会有多大帮助。相反,您应该优化代码。
首先,使用VS内置的分析器(调试/性能分析器菜单)找出您的应用花费最多的时间,优化它。
此外,所有现代CPU至少都是双核心(最后一款单核Celeron来自2013年)。因此,“它消耗了相当大的数量〜6ms做它自己的东西”不应该是这种情况。你自己的东西应该在一个单独的线程中运行,而不是在你用来渲染的同一个线程上运行。 See this article了解如何实现这一目标。您可能不需要 级别的复杂性,只需2个线程+ 2个任务(计算和渲染)就足够了,但该文章应该为您提供一些如何重新设计应用程序的想法。然而,这种方法将带来1个额外的输入延迟帧(对于1帧,后台线程将计算内容,只有渲染器线程将显示其结果的下一帧),但是使用165Hz渲染,您可能会使用它。 / p>