Quel est le meilleur moyen de comparer les programmes sous Windows?

Je dois faire des tests de performances sur les programmes .NET (C #) sous Windows, mais je n’ai pas fait beaucoup de benchmarking dans le monde Windows. J’ai envisagé d’utiliser le moniteur de performances Windows 2000 / XP avec des compteurs personnalisés pour cela, mais je ne pense pas que ce soit tout à fait ce que je veux.

Existe-t-il de bonnes fonctionnalités système dans Windows XP ou dois-je utiliser simplement System.Diagnostics.Stopwatch [edit] et écrire des journaux de texte pour une interprétation manuelle, ou y a-t-il autre chose?

Edit: y a-t-il autre chose que System.Diagnostics.Stopwatch ?

Pour le micro-benchmarking, j’aime beaucoup le logiciel MeasureIt (téléchargeable sur http://msdn.microsoft.com/en-us/magazine/cc500596.aspx ). C’est un projet de test écrit par Vance Morrison, architecte de performance sur le CLR. Il a actuellement un bon ensemble de tests pour un certain nombre de méthodes de base .Net / CLR. La meilleure partie est qu’il est sortingvial de modifier et d’append de nouveaux tests pour ce que vous souhaitez tester. Exécutez simplement “MeasureIt / edit” et il lancera VS avec le projet pour que vous puissiez voir comment ces tests sont écrits et en append de nouveaux si vous le souhaitez.

Comme déjà indiqué, StopWatch est probablement la manière la plus simple de faire cela et MeasureIt utilise StopWatch en dessous pour ses timings mais il fait aussi d’autres choses comme exécuter un bloc de code X fois et ensuite fournir des statistiques pour les exécutions.

 using System.Diagnostics; .... Stopwatch sw = new Stopwatch(); sw.Start(); // Code you want to time... // Note: for averaged accuracy (without other OS effects), // run timed code multiple times in a loop // and then divide by the number of runs. sw.Stop(); Console.WriteLine("Took " + sw.ElapsedTicks + " Ticks"); 

Si vous ne voulez que quelques chiffres rapides, vous pouvez utiliser Powershell pour chronométrer l’exécution globale. Utilisez l’applet de commande measure-command. C’est à peu près l’équivalent de “time” dans Unix.

 > measure-command { your.exe arg1 } Days : 0 Hours : 0 Minutes : 0 Seconds : 4 Milliseconds : 996 Ticks : 49963029 TotalDays : 5.78275798611111E-05 TotalHours : 0.00138786191666667 TotalMinutes : 0.083271715 TotalSeconds : 4.9963029 TotalMilliseconds : 4996.3029 

Il y a pas mal de profileurs. Voici certains de ceux que je connais:

  • Red Gate’s ANTS
  • Le profil de .Net de Yourkit
  • JetBrains dotTrace

Si vous continuez à utiliser System.Diagnostics.Stopwatch, vous pourrez instrumenter et mesurer uniquement des points particuliers de votre code, où vous placerez explicitement le bouton Démarrer / Arrêter. C’est assez bon pour mesurer des pièces spécifiques, comme une boucle serrée ou des choses comme ça, mais cela ne vous donnera pas une image complète de l’endroit où votre programme passe le plus de temps.

Ce n’est peut-être pas ce que vous voulez, mais dotTrace offre de nombreux diagnostics utiles et est intégré à Visual Studio.

Si votre projet est assez volumineux et qu’il y a beaucoup de modules effectuant un grand nombre d’appels, vous pouvez: http://www.moduleanalyzer.com/