有一个非常大的LOB silverlight应用程序,我们编写了很多自定义控件,这些控件在绘图时比较重。
所有数据都由RIA服务加载,处理并绑定(使用INofityPropertyChanged接口)到视图。
问题是第一次绘图需要花费很多时间。在调用服务(服务器)和重绘之后非常快。
我使用Equatec profiler来跟踪问题。我看到处理只需几毫秒,所以我的想法是SL引擎的绘图很慢。
我想知道是否有可能在SL内部以某种方式剖析以检查哪些绘图操作花费了太多时间。是否有任何指导如何更快地绘制复杂的自定义控件?
答案 0 :(得分:7)
简短回答 - 不,没有超级简便的方法可以找出你的应用程序运行缓慢的原因。
长答案:
我从来没有使用Equatec profiler for Silverlight,但它似乎与dotTrace类似。无论哪种方式,它们最终都会显示与xPerf相同的信息
基本上,您面前的信息是说哪些方法和类占用了最多的时间。
如果该信息指向Silverlight框架图形引擎(agcore.dll和npctrl.dll),您将不得不开始一个缓慢的过程来弄清楚您做错了什么。
在这一点上,我强烈建议您观看Seema Ramchandani关于Silverlight性能的每一次演讲。具体为PDC08,Mix09和Mix10。
性能优化步骤#1 :测量。测量。测量。
有一个明确的基线,你想要改进什么,并设置一个数字期望,当性能足够好时
这样,您就可以验证您的更改是否对性能产生了积极影响。
性能优化的第2步:开始删除内容 在你的情况下,我开始评论表格外的控件。当性能大幅提升时,你就找到了罪魁祸首。
性能优化的第3步:尝试修复弱链接。
我就是这样解决这个问题的。
此致
- 贾斯汀·安吉尔
答案 1 :(得分:2)
尝试使用Visual Studio分析器进行分析,以便更好地衡量托管代码和Silverlight中执行的本机代码。探查器将帮助您指出您花费大部分时间(热门路径是什么)以及您是否将其花费在框架(SL)代码或您自己的代码中。
分析的基础是:
您可以在我的博客上找到有关使用探查器的详细说明:http://www.nachmore.com/2010/profiling-silverlight-4-with-visual-studio-2010/
如果您发现自己花时间在Silverlight中,请跟踪代码路径以查看代码触发昂贵调用的位置,以便您可以根据速度减慢的原因调查特定解决方案。
希望有所帮助,