测量Silverlight / Moonlight应用程序的性能

时间:2011-05-04 10:33:14

标签: silverlight performance moonlight

我对Silverlight的高级性能测量感兴趣,特别是与Moonlight相比。我浏览过并提出了一些工具(SilverliightSpy等)但是必须有其他工具或方法来实现这一点。

我想调查的高级问题是

  • 月光和银光如何比较性能
  • 我应该如何设计我的应用以获得最佳性能(在SL,ML或两者上)

我感兴趣的表现特征是

  • 我的测试应用程序如何利用CPU(粗略比较) - 即将其卸载到GPU上
  • 渲染时间。不仅是FPS而且还有延迟 - “如果我修改一些视觉元素的属性......”
    • “......在屏幕上更新前多久”
    • “......在此期间使用了多少CPU”

有什么建议吗?能够在应用程序中执行此操作会很高兴,这样我就可以在Silverlight上运行应用程序,然后在Moonlight上运行并比较其输出。跨平台分析器也可以工作。

1 个答案:

答案 0 :(得分: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++;
}