Vous devriez certainement de retour ElapsedMilliseconds au lieu de ElapsedTicks. La valeur retournée par ElapsedTicks dépend du Chronomètre fréquence, qui peut être différent sur différents systèmes. Il ne correspondra pas nécessairement à la propriété Ticks d'un Temps ou un objet DateTime.
Voir http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.elapsedticks.aspx.
Si vous ne voulez que la résolution supplémentaire de Tiques, vous devez retourner watch.Elapsed.Ticks
(c'est à dire d'Horodatage.Les tiques) au lieu de watch.ElapsedTicks
(ce pourrait être l'un des plus subtiles potentiel d' erreurs .Net). À partir de MSDN:
Chronomètre tiques sont différents de
DateTime.Les tiques. À chaque itération dans le
DateTime.Les tiques valeur représente un
100 nanosecondes intervalle. Chaque tick
le ElapsedTicks valeur représente le
intervalle de temps égal à 1 seconde
divisé par la Fréquence.
Autre que cela, je suppose que ton code est très bien, bien que je pense que vous auriez y compris certains de la méthode-l'appel de la surcharge dans vos mesures, qui pourrait être important si les méthodes elles-mêmes de prendre très peu de temps à s'exécuter. Aussi, vous allez probablement vouloir exclure le premier appel à la méthode de votre moyenne calculée, mais je ne suis pas sûr comment vous pouvez le faire dans votre classe.
Un dernier point, qui n'est probablement pas pertinente pour la plupart des utilisations de cette classe: Chronomètre fonctionne un peu rapide par rapport à l'heure du système. Sur mon ordinateur, il est environ 5 secondes (c'est secondes, pas millisecondes) avant au bout de 24 heures, et sur d'autres machines de cette dérive peut être encore plus grande. Donc c'est un peu trompeur de dire que c'est très précis, quand il fait juste très granulaire. Pour le calendrier de courte durée de méthodes, de toute évidence, cela ne serait pas un problème important.
Et encore un dernier point, qui certainement est pertinente: j'ai souvent constaté lors de l'analyse comparative que je vais obtenir un tas de temps de course qui sont tous regroupés dans une fourchette étroite de valeurs (par exemple, 80, 80, 79, 82, etc.), mais de temps en temps quelque chose d'autre se passe dans Windows (comme l'ouverture d'un autre programme ou mon anti-virus coups de pied ou quelque chose) et je vais obtenir une valeur sauvagement hors de contrôle avec les autres (par exemple, 80, 80, 79, 271, 80 etc.). Je pense que une solution simple à ce aberrantes problème est l'utilisation de la médiane de vos mesures, au lieu de la moyenne. Je ne sais pas si Linq prend en charge automatiquement ou pas.