繁体   English   中英

调试 ListBoxDragDropTarget (Silverlight Toolkit) 上的性能问题?

[英]Debugging a performance issue on ListBoxDragDropTarget (Silverlight Toolkit)?

我有一个复杂的项目,使用 SilverLight Toolkit 的 ListBoxDragDropTarget 进行拖放操作,它正在最大化 CPU。 我试图在一个小示例项目中重现该问题,但它工作正常。 当我从页面中删除我们的自定义 styles 和所有其他控件时,问题仍然存在,但该页面托管在另一个页面的 ScrollView 中。

“EnableRedrawRegions”显示屏幕在每一帧上都被重绘。 我的问题是:我怎样才能找到这种不断重绘的原因?

我使用XPerf来帮助追踪与 Silverlight 中重绘相关的性能问题。 这不是完全简单或简单的过程,但它可以帮助您指出问题所在的正确方向。

我从Seema 的一篇很棒的教程开始,该教程介绍了使用 XPerf 命令行工具来分析 Silverlight 应用程序的 CPU 使用情况。 您基本上可以加载您的应用程序,使用 XPerf 开始采样,执行 CPU 密集型操作,然后停止采样并分析 XPerf 生成的配置文件。 当您查看 XPerf 图表时,您可以 select 可以通过某些进程(例如 iexplorer 或您的浏览器)进行过滤以查看总 CPU 百分比。 然后,您可以 select 在配置文件中的特定时间长度,并深入查看哪些函数来自哪些 DLL 占用最多 CPU 周期。 如果您将 XPerf 指向 Microsoft 的符号服务器,您应该获得应用程序花费大部分时间的函数的具体名称。

For a Silverlight app it's most important to look at what's going on in agcore.dll , npctrl.dll , and coreclr.dll . 如果您的性能问题与重绘有关,则大部分 CPU 时间可能都花在agcore.dll上,因为它为 Silverlight 完成了大部分与图形相关的工作。 然后,您可以深入研究并查看agcore.dll中的特定函数,这些函数在您的采样时间内最常被调用。

我知道这是一种令人讨厌的调试方式,因为您只能真正看到核心 Silverlight 函数中发生了什么,但它可能能够帮助您弄清楚发生了什么。 就我而言,我能够看到大部分时间都花在了计算agcore.dll中的阴影上。 然后我发现我愚蠢地在投影效果中有一些内容,该效果每秒变化多次,并导致整个投影效果不断重新计算/重绘。

确定重绘问题后,您可能需要查看GPU Acceleration with BitmapCaching(如果您还没有的话)。 这将有助于将一些重绘工作卸载到 GPU 并为您节省一些 CPU 周期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM