Question

Je dois effectuer des tests de performances sur les programmes .NET (C #) sous Windows, mais je n'ai pas fait beaucoup d'analyses comparatives 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 installations système pour cela dans Windows XP, ou dois-je simplement utiliser System.Diagnostics.Stopwatch [edit] et écrire des journaux de texte pour interprétation manuelle, ou existe-t-il autre chose?

Modifier: existe-t-il autre chose que System.Diagnostics.Stopwatch ?

Était-ce utile?

La solution

Pour les micro-analyses, j'aime beaucoup MeasureIt (peut être téléchargé à partir de http: //msdn.microsoft.com/en-us/magazine/cc500596.aspx ). C'est un projet test écrit par Vance Morrison, un architecte de la performance sur le CLR. Il dispose actuellement d'un bon ensemble de points de référence pour un certain nombre de méthodes de base .Net / CLR. La meilleure partie est qu’il est trivial d’ajuster et d’ajouter de nouveaux points de repère pour tout ce que vous souhaitez tester. Exécutez simplement " MeasureIt / edit " et il lancera VS avec le projet pour que vous puissiez voir comment ces repères sont écrits et en ajouter de nouveaux de la même manière si vous le souhaitez.

Comme cela a déjà été indiqué, StopWatch est probablement le moyen le plus simple de le faire. MeasureIt utilise StopWatch en dessous pour ses synchronisations, mais il effectue également d'autres opérations, telles que l'exécution d'un bloc de code X, puis la fourniture de statistiques pour les exécutions. .

Autres conseils

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 voulez juste 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 équivalent à " time " sous 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 existe assez peu de profileurs. Voici certains de ceux que je connais:

Si vous continuez à utiliser System.Diagnostics.Stopwatch, vous ne pourrez instrumenter et mesurer que des points particuliers de votre code, où vous mettez explicitement le Start / Stop. C’est suffisant pour mesurer des éléments spécifiques, comme une boucle serrée, etc., mais cela ne vous donnera pas une image complète de l’endroit où votre programme passe le plus clair de son temps.

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

Si votre projet est assez volumineux et que de nombreux modules effectuent un grand nombre d'appels, vous pouvez: http://www.moduleanalyzer.com/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top