2011-05-04 65 views
1

我对Silverlight的高级性能测量感兴趣,特别是与Moonlight相比。我浏览过并找到了一些工具(SilverliightSpy等),但必须有其他工具或方法来完成此操作。测量Silverlight/Moonlight应用程序的性能

高层次的问题,我想探讨的

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

的性能特点我感兴趣的是

  • 如何我的测试应用程序使用CPU(粗略比较) - 即是否将工作加载到GPU上?
  • 渲染时间。不仅FPS也延迟 - “如果我修改一些视觉元素的属性...”
    • ” ......有多少是在CPU利用“......多久,他们得到更新,在屏幕上之前”在那期间“

有什么建议吗?能够在应用程序中执行此操作会很好,这样我就可以在Silverlight上运行应用程序,然后在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++; 
}