我的GUI遇到了问题.
我的GUI中有多个部分.
第一个用于图像(从500×500到3000×3000,每秒最多更新4次)
第二个是主菜单
第三个按钮具有关于图像的选项.我没有立刻显示所有这些,我滚动浏览几个菜单,我只渲染那些可见的菜单. (otpions的一个例子是图像的像素大小)
我在一个800x800px大的Viewbox中显示图像.我用Stretch =“{Binding Path = StretchMode}”拉伸盒子里面的图像
我得到的图像是某种流.我每秒都会得到多张图像.
现在,当我显示图像时,第一个GUI部分工作正常(无论图像大小如何),但其他部分有时会有一个沉重的framedrop.我举几个例子:
例1:
图像大500×500像素.我可以在没有framedrop的情况下工作,整个gui更新正确.
例2:
图像大小为1500×1500像素.我可以在没有Framedrop的情况下工作,整个gui更新正确.
例3:
图像大小为2500×2500像素.图像更新速度很快,但GUI的其余部分的帧速率从60 fps到fps,有时甚至达到1 fps.
我对这个问题的看法是:
>硬件已达到极限.但是Visual Studio的Taskmanager和CPU / RAM分析表明它是好的.
>渲染GUI太多了,因为3000×3000很大,每秒4次也不慢.在加载测试(我从硬盘驱动器加载它们)3000×3000图像(相同数据类型)后,它工作得很快,没有问题.
>一次性更改GUI太多.我只用了5次更新就试用了这个软件.仍然是同样的问题.
>未发生Microsoft Prism事件.这不是因为它进入控制器内部并且如果有变化则提升变化. (我有一个记录器,它写入日志文件,它提升了更改事件,而不是GUI正在改变)
>使用不同的数据类型.可能,但我尝试了几个. (BitmapSource,BitmapImage和WriteableBitmap)
>在另一个线程中外包一些渲染选项.仍然没有变化.
我希望你能给我一些想法,为什么GUI有这种行为.
如果您需要代码,请告诉我.
我没有使用VM.
在Windows 7 64位和Windows 8.1 64位上出现此问题(在Windows 10上不是testet)
我的硬件不同.问题出现在我的笔记本电脑上(Intel i7-4702MQ @ 2.2 Ghz,8 gb ddr ram,英特尔主板显卡)和不同规格的workpc(最高的是:Intel Xeon 3.5 Ghz,128 GB DDR4 Ram和Titan X和一个4k监视器)
解决方法:
编辑:道歉,堆栈没有我的分数高到足以评论,所以评论 – 这里的内容相反.
编辑1:进程资源管理器(来自Sysinternals)应该被用作一个低悬的水果,看看什么(如果有的话)视频资源有高消费.进程资源管理器中有一个选项卡/区域用于查看图形资源.在进程资源管理器中,您可以执行“选择列”并添加GPU资源以便于查看.尝试是一个很好的角度.
我想冒昧地猜测我们正在处理一个问题
带有DPC数据的ETW跟踪可能会有所帮助.此外,您没有提到您是否在VM中,VM会使任务管理器反映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 /不).