2013-05-07 173 views
3

我正在编程一个WPF应用程序。我在一些窗口中使用BitmapCache,就像这样:过程“系统”导致CPU使用率过高

CacheMode = new BitmapCache() { 
      EnableClearType = false, 
      RenderAtScale = 2, 
      SnapsToDevicePixels = false; } 

然后:

  1. 运行我的机应用,CPU使用率是正常的。
  2. 按Ctrl + Alt键+德尔,显示任务管理器,命名为 “系统” 的过程中显示的CPU使用率过高。

进程浏览器示出,它是由这些2个线程导致问题:

NTOSKRNL.EXE WheaAttemptPhysicalPageOffline + 0x350
dxgmms1.sys VidMmInterface + 0x26500

我用!英特尔高清显卡。

这是一个WPF,直接或图形驱动程序的错误?有人知道吗?

+2

高了多久?多高?为什么它应该是一个bug? – 2013-05-07 10:45:49

+0

它会持续几分钟,WPF屏幕将被冻结。 – wzpchina 2013-05-08 00:54:08

回答

3

“系统”过程是一个虚假的过程,显示在环0中运行的Windows代码的统计信息。例如,设备驱动程序就在那里。 Dxgmms1.sys是DirectX的内存管理器。 WPF使用DirectX来渲染图形。位图可以使用大量内存。

因此,使用位图在DirectX相关设备驱动程序中花费大量CPU时间的WPF应用程序并不是什么神秘之处。英特尔高清显卡是图形加速器的最低价廉价实现。在AMD或NVidea视频卡上花费50美元可能会很快修复。不要求WPF缩放位图或限制它需要渲染的速度,因为视觉树已失效,这可能是另一个快速修复。

+0

是的,这个问题在NVidea显卡中不会发生。 – wzpchina 2013-05-09 06:52:31

+0

我发现,当我显示一个窗口并设置bitmapcahce时,它也不会发生。但是,当我显示多个窗口,它也不会发生,如果我在第一个显示窗口中设置bitmapCache。如果我在第二个显示窗口中设置了bitmapCache,就会发生这种情况。这很好奇。 – wzpchina 2013-05-09 06:58:53