Измерьте производительность приложений Silverlight / Moonlight - PullRequest
1 голос
/ 04 мая 2011

Меня интересует измерение производительности Silverlight на высоком уровне, особенно по сравнению с Moonlight.Я просмотрел и нашел некоторые инструменты ( SilverliightSpy среди других), но должны быть другие инструменты или способы сделать это.

Вопросы высокого уровня, которые я хотел бы задать

  • Как лунный и серебряный свет сравниваются с производительностью
  • Как мне разработать приложение, чтобы добиться максимальной производительности (на SL, ML или на обоих)

Интересующие меня характеристики производительности:

  • Как мое тестовое приложение использует процессор (грубое сравнение) - т.е. работает ли оно без нагрузки на графический процессор
  • Время рендеринга,Не только FPS, но и задержка - «если я изменю свойства некоторых визуальных элементов ...»
    • «... сколько времени до их обновления на экране«
    • »... какстоит процессор за это время "

Есть предложения?Было бы неплохо сделать это в приложении, чтобы я мог просто запустить приложение в Silverlight, а затем в Moonlight и сравнить его результаты.Кроссплатформенный профилировщик также будет работать.

1 Ответ

1 голос
/ 10 мая 2011

Поскольку никто еще не ответил, я подумал, что смогу опубликовать свои собственные выводы после того, как задал вопрос.Я до сих пор не понял, как измерить, сколько времени потребовалось от изменения внешнего вида визуального элемента до его отображения на экране.

Чтобы рассчитать загрузку ЦП в вашем приложении, вы можете использовать класс аналитики ..Чтобы вычислить частоту кадров, просто подключите статическое событие рендеринга класса CompositionTarget.

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