如何用很多自定义控件配置silverlight mvvm应用程序

问题描述:

有一个相当大的LOB silverlight应用程序,我们编写了很多自定义控件,这些控件在绘图中相当沉重。如何用很多自定义控件配置silverlight mvvm应用程序

所有数据由RIA服务加载,处理并绑定(使用INofityPropertyChanged接口)到视图。

问题是第一次绘图需要很长时间。以下调用服务(服务器)和重绘是非常快的。

我用Equatec分析器来跟踪问题。我看到处理过程需要几个毫秒,所以我的想法是SL引擎的绘制速度很慢。

我想知道是否有可能在SL内部以某种方式分析进程以检查哪些绘图操作花费了太多时间。是否有任何指导方针如何实现更复杂的自定义控件的绘制?

简短回答是 - 不,没有超级简单的方法来弄清楚为什么你的应用程序很慢。

龙答:
我从来没有使用Equatec探查为Silverlight,但它似乎类似于dotTrace。无论哪种方式,他们最终都会显示与xPerf相同的信息。
基本上你应该知道的信息是说哪些方法和类占用了最多的时间来执行。

如果该信息指向Silverlight框架图形引擎(agcore.dll和npctrl.dll),那么您将不得不开始一个缓慢的过程来计算出您做错了什么。
在这一点上,我强烈建议您观看Seema Ramchandani关于Silverlight性能的每一次演讲。具体为PDC08,Mix09Mix10

性能优化的步骤#1:措施。测量。测量。
对于你想要改进的内容有一个明确的基准,并且在性能足够好的时候设置一个数字期望值。
通过这种方式,您可以验证您的更改对性能产生了积极影响。

性能优化的步骤#2:开始删除东西。
就你而言,我会开始从窗体中注释出控件。当性能大幅提高时,你找到了你的罪魁祸首。

性能优化的步骤#3:尝试修复薄弱环节。

这就是我将如何去解决这个问题。

真诚,
- 贾斯汀天使

尝试与Visual Studio分析器分析,以获得的托管代码一个很好的措施和Silverlight中执行本地代码。分析器将帮助您指出您花费大部分时间(热门路径)的位置以及您是否将其花费在框架(SL)代码或您自己的代码中。

分析的基础是:

  1. 打开Visual Studio命令提示符(作为管理员),“CD”到你的DLL和PDB文件所在的目录(通常是您的“调试”文件夹)
  2. VSPerfClrEnv/sampleon
  3. VSPerfCmd -start:采样 - 输出:somefile.vsp VSPerfCmd -globalon VSPerfCmd - 启动: “C:\ Program Files文件(x86)的\的Internet Explorer \ IEXPLORE.EXE” -args: “”
  4. VSPerfCmd -shutdown
  5. VS PerfClrEnv /关

你可以使用我的博客上探查发现的详细说明:http://www.nachmore.com/2010/profiling-silverlight-4-with-visual-studio-2010/

如果你发现你Silverlight中花费的时间,跟踪代码路径,看看你的代码触发昂贵的通话,以便您可以根据减慢的原因调查特定的解决方案。

希望帮助,

  • 奥伦
+0

它在VS专业无法版:( – tomo 2010-05-29 21:43:07

+0

这是一个很好的点,这是我应该指出,不幸的是纹仅适用于Premium和最终... – Oren 2010-05-31 18:34:03