【问题标题】:Measure performance of Silverlight / Moonlight applications测量 Silverlight / Moonlight 应用程序的性能
【发布时间】:2011-05-10 14:16:09
【问题描述】:
我对 Silverlight 的高级性能测量感兴趣,尤其是与 Moonlight 相比。我四处浏览并想出了一些工具(SilverliightSpy 等),但必须有其他工具或方法来做到这一点。
我想调查的高级问题是
- 月光和银光在性能方面的比较
- 我应该如何设计我的应用以获得最佳性能(在 SL、ML 或两者上)
我感兴趣的性能特征是
- 我的测试应用程序如何利用 CPU(粗略比较) - 即它是否将负载工作转移到 GPU 上
- 渲染时间。不仅是 FPS,还有延迟——“如果我修改了一些视觉元素的属性......”
- “...多久才能在屏幕上更新”
- "...这段时间使用了多少 CPU"
有什么建议吗?能够在应用程序内执行此操作会很好,这样我就可以在 Silverlight 上运行该应用程序,然后在 Moonlight 上运行该应用程序并比较其输出。不过,跨平台分析器也可以工作。
【问题讨论】:
标签:
silverlight
performance
moonlight
【解决方案1】:
由于还没有人回答,我想我可以在提出问题后发布自己的发现。我还没有弄清楚如何测量从修改视觉效果到绘制到屏幕上所花费的时间。
要计算应用内的 CPU 利用率,您可以使用 Analytics class。要计算帧率,只需挂接到 CompositionTarget 类的静态 rendering event。
private DispatcherTimer fpsTimer = new DispatcherTimer();
private DateTime lastFpsUpdate;
private Analytics analyzer = new System.Windows.Analytics();
private int frameCount;
public MyClass()
{
fpsTimer.Interval = TimeSpan.FromSeconds(1);
fpsTimer.Tick += new EventHandler(fpsTimer_Tick);
fpsTimer.Start();
lastFpsUpdate = DateTime.Now;
CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
}
// Called every second
void fpsTimer_Tick(object sender, EventArgs e)
{
double framerate = 0;
framerate = frameCount / (DateTime.Now - lastFpsUpdate).TotalSeconds;
c_statusMessage.Text = String.Format("Framerate: {0:0} fps, CPU utilization: {1:0.0}%", framerate, analyzer.AverageProcessLoad);
lastFpsUpdate = DateTime.Now;
frameCount = 0;
}
// Called by the framework on every frame
void CompositionTarget_Rendering(object sender, EventArgs e)
{
frameCount++;
}