2011-05-04 31 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++; 
}