我的部分GUI很慢

时间:2017-01-03 15:05:19

标签: c# wpf prism

我的GUI遇到了问题。 我的GUI中有多个部分。 第一个用于图像(从500x500到3000x3000,每秒最多更新4次) 第二个是主菜单 第三个按钮具有关于图像的选项。我没有立刻显示所有这些,我滚动浏览几个菜单,我只渲染那些可见的菜单。 (otpions的一个例子是图像的像素大小) 我在一个800x800px大的Viewbox中显示图像。我使用Stretch="{Binding Path=StretchMode}"在框内拉伸图像 我得到的图像是某种流。我每秒都会得到多张图像。

现在,当我显示图像时,第一个GUI部分工作正常(无论图像大小如何),但其他部分有时会有一个沉重的framedrop。我将举几个例子:

示例1:

图像大500x500像素。我可以在没有framedrop的情况下工作,整个gui更新正确。

示例2:

图像尺寸为1500x1500像素。我可以在没有Framedrop的情况下工作,整个gui更新正确。

示例3:

图像大小为2500x2500像素。图像更新速度很快,但GUI的其余部分的帧数从60 fps到fps,有时甚至达到1 fps。

我对这个问题的看法是:

  1. 硬件已达到极限。但是Visual Studio的Taskmanager和CPU / RAM分析表明它是好的。
  2. 渲染GUI太多了,因为3000x3000很大,每秒4次也不慢。在加载测试(我从硬盘驱动器加载它们)3000x3000图像(相同数据类型)后,它运行得很快,没有任何问题。
  3. 一次性更改GUI。我只用了5次更新就试用了这个软件。还是一样的问题。
  4. 未发生Microsoft Prism事件。这不是因为它进入控制器内部并且如果有变化则提升变化。 (我有一个记录器,它写了日志文件,它提升了Change事件,而不是GUI正在改变)
  5. 使用其他数据类型。可能,但我尝试了几个。 (BitmapSource,BitmapImage和WriteableBitmap)
  6. 在另一个线程中外包一些渲染选项。仍然没有变化。
  7. 我希望你能给我一些想法,为什么GUI有这种行为。 如果您需要代码,请告诉我。

    我没有使用虚拟机。 在Windows 7 64位和Windows 8.1 64位上出现此问题(在Windows 10上不是testet) 我的硬件不同。问题出现在我的笔记本电脑上(英特尔i7-4702MQ @ 2.2 Ghz,8 gb ddr ram,英特尔主板显卡)以及不同规格的工作电脑(最高的是:带有3.5 Ghz的Intel Xeon,128 GB DDR4 Ram和一个Titan X和一个4k监视器)

1 个答案:

答案 0 :(得分:0)

编辑:道歉,堆栈的分数不足以发表评论,所以评论内容在这里反而是。

EDIT1:应该使用进程资源管理器(来自Sysinternals)作为一个低悬的水果,看看哪些(如果有的话)视频资源的消费量很高。进程资源管理器中有一个选项卡/区域用于查看图形资源。在进程资源管理器中,您可以执行“选择列”并添加GPU资源以便于查看。尝试是一个很好的角度。

我想冒昧地猜测我们正在处理

带有DPC数据的ETW跟踪可能会有所帮助。另外你没有提到你是否在虚拟机中,虚拟机会使任务管理器反映CPU上不准确的资源消耗。

如何收集此类跟踪的示例如下:https://blogs.technet.microsoft.com/jeff_stokes/2012/09/18/how-to-collect-a-trace-for-audio-or-video-problems-in-windows-7/

无论如何,我怀疑您正在查看内核驱动程序或IPC / DPC问题,而不仅仅是原始CPU消耗。我认为需要提供更多数据。 (硬件规格,使用的操作系统,VM /不)。