2011-05-04 15 views
1

Je suis intéressé par la mesure de performance de haut niveau de Silverlight, en particulier par rapport à Moonlight. J'ai parcouru autour et ai trouvé quelques outils (SilverliightSpy entre d'autres) mais il doit y avoir d'autres outils ou manières de faire ceci.Mesurer les performances des applications Silverlight/Moonlight

Les questions de haut niveau que je voudrais étudier sont

  • Comment le clair de lune et silverlight comparer les performances de WRT
  • Comment dois-je concevoir mon application pour obtenir les meilleures performances (sur SL, ML ou les deux)

Les caractéristiques de performance qui me intéressent sont

  • COMMEnT mon application de test utilise le CPU (comparaison approximative) - c'est-à-dire le fait de décharger le travail sur le GPU
  • Temps de calcul. Non seulement FPS mais aussi la latence - « si je modifie certaines propriétés de l'élément visuel ... »
    • « ... combien de temps avant qu'ils ne soient mis à jour à l'écran »
    • » ... Quel est le CPU utilisé pendant ce temps »

Toutes les suggestions? Ce serait bien de pouvoir le faire dans l'application, de sorte que je puisse simplement lancer l'application sur Silverlight puis sur Moonlight et comparer sa sortie. Un profileur multi-plateforme fonctionnerait aussi bien.

Répondre

1

Puisque personne n'a encore répondu, je me suis dit que je pourrais poster mes propres conclusions depuis que j'ai posé la question. Je n'ai toujours pas compris comment mesurer combien de temps il a fallu pour modifier l'apparence d'un visuel jusqu'à ce qu'il ait été dessiné à l'écran.

Pour calculer l'utilisation du processeur dans votre application, vous pouvez utiliser le Analytics class. Pour calculer le framerate, accrochez-vous au rendering event statique de la classe 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++; 
} 
Questions connexes