我们有一款旧版(Win32)和新版(WPF)的交易软件,交易员目前在同时运行这两个版本。然而,运行WPF应用程序经常会严重降低Win32应用程序的重绘速率。
如果不运行WPF应用程序(或将其最小化),Win32应用程序的绘制速率就是流畅和快速的。但是,如果与之同时打开WPF应用程序,则Win32应用程序的用户界面绘制速率明显变慢。运行WPF应用程序似乎会触发使用某些资源,这些资源被从Win32应用程序中取走(两者都是图形密集型),导致了这种减速现象。
CPU和内存并没有接近饱和,因此看起来与它们无关。降低分辨率和/或减少显示器数量(从而减少显卡内存使用和带宽负载)没有任何显着的差异,因此似乎也不是图形硬件性能问题。
一个可能解释原因的假设如下:
我们知道,在底层,WPF和Win32应用程序都将图形信息输出到一个Windows“消息泵”中,这基本上是一个指令队列,用于绘制到屏幕上。如果WPF应用程序没有运行,Win32应用程序可以完全自由地访问它,并且屏幕更新是流畅的。与之同时运行WPF应用程序会在此队列上放置额外的消息,因此Win32应用程序必须更努力地竞争访问它(以执行每个屏幕元素的更新),从而“堵塞泵”,导致我们看到的效果。
如果以上是原因,有人可以推荐管理/控制窗口消息泵以防止发生这种情况的方法吗?
闪烁是当资源不足时通常会出现的类型,您可以看到单个元素(表单、标签)闪烁并逐渐绘制到屏幕上。
如果有任何建议/想法,请告诉我们。
如果不运行WPF应用程序(或将其最小化),Win32应用程序的绘制速率就是流畅和快速的。但是,如果与之同时打开WPF应用程序,则Win32应用程序的用户界面绘制速率明显变慢。运行WPF应用程序似乎会触发使用某些资源,这些资源被从Win32应用程序中取走(两者都是图形密集型),导致了这种减速现象。
CPU和内存并没有接近饱和,因此看起来与它们无关。降低分辨率和/或减少显示器数量(从而减少显卡内存使用和带宽负载)没有任何显着的差异,因此似乎也不是图形硬件性能问题。
一个可能解释原因的假设如下:
我们知道,在底层,WPF和Win32应用程序都将图形信息输出到一个Windows“消息泵”中,这基本上是一个指令队列,用于绘制到屏幕上。如果WPF应用程序没有运行,Win32应用程序可以完全自由地访问它,并且屏幕更新是流畅的。与之同时运行WPF应用程序会在此队列上放置额外的消息,因此Win32应用程序必须更努力地竞争访问它(以执行每个屏幕元素的更新),从而“堵塞泵”,导致我们看到的效果。
如果以上是原因,有人可以推荐管理/控制窗口消息泵以防止发生这种情况的方法吗?
闪烁是当资源不足时通常会出现的类型,您可以看到单个元素(表单、标签)闪烁并逐渐绘制到屏幕上。
如果有任何建议/想法,请告诉我们。