我的 GUI 的一部分很慢

Evo*_*oul 5 c# wpf prism

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

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

示例 1:

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

示例 2:

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

示例 3:

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

我对这个问题的想法是:

  1. 硬件已达到极限。但是使用 Visual Studios 查看 Taskmanager 和 CPU/RAM 分析表明它没问题。
  2. 为 GUI 渲染太多了,因为 3000x3000 很大而且每秒 4 次也不慢。经过加载(我从硬盘驱动器加载它们)3000x3000 图像(相同数据类型)的测试后,它运行迅速且没有问题。
  3. 一次对 GUI 进行太多更改。我尝试了只有 5 个更新的软件。还是一样的问题。
  4. 未发生 Microsoft Prism 事件。这也不是因为它位于控制器内部,并且在发生更改时会引发更改。(我有一个写入日志文件的记录器,它引发的 Change 事件比 GUI 真正发生的变化要多)
  5. 使用不同的数据类型。可能,但我尝试了几个。(BitmapSource、BitmapImage 和 WriteableBitmap)
  6. 在另一个线程中外包一些渲染选项。还是没有变化。

我希望你能给我一些想法为什么 GUI 有这种行为。如果你需要代码,请告诉我。

我没有使用虚拟机。问题出现在 Windows 7 64 位和 Windows 8.1 64 位(不是 Windows 10 上的 testet)我的硬件不同。问题出现在我的笔记本电脑(Intel i7-4702MQ @2.2 Ghz、8 gb ddr ram、intel 显卡)和不同规格的工作电脑上(最高的是:Intel Xeon with 3.5 Ghz、128 GB DDR4 Ram 和 Titan X 和4k 显示器)

Jef*_*kes 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- windows-7 中的问题/

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