C# 在ListBoxDragDropTarget(Silverlight Toolkit)上调试性能问题?
我有一个使用SilverLight Toolkit的ListBoxDragDropTarget进行拖放操作的复杂项目,它正在最大化CPU。我试图在一个小样本项目中重现这个问题,但效果很好。当我从页面中删除自定义样式和所有其他控件,但页面托管在另一个页面的滚动视图中时,问题仍然存在 “EnableRedrawRegions”显示屏幕在每一帧上都会被重绘。我的问题是:我如何找到这种不断重画的原因?我曾经帮助跟踪与Silverlight中重画相关的性能问题。这不是一个完全直接或简单的过程,但它可以帮助您指出问题所在的正确方向 我从一个关于使用XPerf命令行工具来分析Silverlight应用程序的CPU使用情况的例子开始。您基本上可以加载应用程序,开始使用XPerf进行采样,执行CPU密集型操作,然后停止采样并分析XPerf生成的配置文件。当您查看XPerf图表时,您可以选择“可以通过某些进程(如iexplorer或您的浏览器)进行筛选”,以查看总CPU百分比。然后,您可以在配置文件中选择特定的时间长度,并深入查看DLL占用最多CPU周期的功能。如果将XPerf指向Microsoft的symbol server,则应获得应用程序大部分时间使用的函数的具体名称 对于Silverlight应用程序,最重要的是查看agcore.dll、npctrl.dll和coreclr.dll中的情况。如果您的性能问题与重画有关,那么大部分CPU时间可能都花在agcore.dll上,因为Silverlight的大部分图形相关工作都是在agcore.dll上完成的。然后,您可以深入其中,查看agcore.dll中在采样期间最常调用的特定函数 我理解这是一种恼人的调试方式,因为您只能真正看到核心Silverlight函数中发生了什么,但它可能会帮助您了解发生了什么。在我的例子中,我可以看到大部分时间都花在计算agcore.dll中的阴影上。然后我才发现,我愚蠢地在一个阴影效果中包含了一些内容,这些内容每秒会发生多次变化,并导致不断地重新计算/重画整个阴影效果C# 在ListBoxDragDropTarget(Silverlight Toolkit)上调试性能问题?,c#,silverlight,debugging,silverlight-4.0,C#,Silverlight,Debugging,Silverlight 4.0,我有一个使用SilverLight Toolkit的ListBoxDragDropTarget进行拖放操作的复杂项目,它正在最大化CPU。我试图在一个小样本项目中重现这个问题,但效果很好。当我从页面中删除自定义样式和所有其他控件,但页面托管在另一个页面的滚动视图中时,问题仍然存在 “EnableRedrawRegions”显示屏幕在每一帧上都会被重绘。我的问题是:我如何找到这种不断重画的原因?我曾经帮助跟踪与Silverlight中重画相关的性能问题。这不是一个完全直接或简单的过程,但它可以帮助
一旦您确定了重绘问题,您可能希望使用BitmapCaching进行研究(如果您还没有这样做的话)。这将有助于将一些重绘工作卸载到GPU,并节省一些CPU周期。我还看到ListBoxDragDropTarget的性能非常糟糕。你能弄明白吗?别客气。我从其中一位家长身上移除了阴影效果。