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

测量Silverlight/Moonlight应用程序的性能,silverlight,performance,moonlight,Silverlight,Performance,Moonlight,我对Silverlight的高级性能测量很感兴趣,尤其是与Moonlight相比。我浏览了一下,找到了一些工具(除其他工具外),但必须有其他工具或方法来做到这一点 我想调查的高层次问题是 月光和silverlight如何比较wrt性能 我应该如何设计我的应用程序以获得最佳性能(在SL、ML或两者上) 我感兴趣的性能特征是 我的测试应用程序如何利用CPU(粗略比较)-例如,它是否可以卸载到GPU 渲染时间。不仅是FPS,还有延迟——“如果我修改某些视觉元素的属性…” “…要多久才能在屏幕上

我对Silverlight的高级性能测量很感兴趣,尤其是与Moonlight相比。我浏览了一下,找到了一些工具(除其他工具外),但必须有其他工具或方法来做到这一点

我想调查的高层次问题是

  • 月光和silverlight如何比较wrt性能
  • 我应该如何设计我的应用程序以获得最佳性能(在SL、ML或两者上)
我感兴趣的性能特征是

  • 我的测试应用程序如何利用CPU(粗略比较)-例如,它是否可以卸载到GPU
  • 渲染时间。不仅是FPS,还有延迟——“如果我修改某些视觉元素的属性…”
    • “…要多久才能在屏幕上更新”
    • “…在此期间CPU的利用率是多少”

有什么建议吗?能够在应用程序中实现这一点会很好,这样我就可以在Silverlight上运行应用程序,然后在Moonlight上运行,并比较其输出。不过,跨平台剖析器也可以工作。

因为还没有人回答这个问题,所以我想在提出这个问题后,我可以发布自己的发现。我还没有弄清楚如何测量从修改视觉效果到将其绘制到屏幕上所花费的时间

要计算应用程序内部的CPU利用率,可以使用。要计算帧率,只需连接到CompositionTarget类的static

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++;
}

既然还没有人回答,我想我可以在提出这个问题后发布我自己的发现。我还没有弄清楚如何测量从修改视觉效果到将其绘制到屏幕上所花费的时间

要计算应用程序内部的CPU利用率,可以使用。要计算帧率,只需连接到CompositionTarget类的static

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++;
}