Le temps s'écouler le calcul en millisecondes C#
J'ai besoin de temps l'exécution d'une séquence de code écrit en C#. À L'Aide De DateTime.Maintenant, je reçois des valeurs incorrectes pour l'ordre de la milliseconde champ.
Par exemple:
int start_time, elapsed_time;
start_time = DateTime.Now.Millisecond;
for(int i = 0; i < N_ITER; i++) {
//cpu intensive sequence
}
elapsed_time = DateTime.Now.Millisecond - start_time;
elapsed_time donne des valeurs négatives.
Comment puis-je remplacer DateTime afin d'obtenir la valeur réelle de la mesure du temps écoulé?
System.Diagnostics.Stopwatch
???- Sûr que ça va vous donner parfois un moins de valeur que Vous ne prenez pas le timestamp, vous prenez seulement une partie seulement. Explication: DateTime.Maintenant.Deuxième = 50 Au Bout De 15 Secondes DateTime.Maintenant.La deuxième sera de 5, pas 65 c'est pourquoi vous obtenez les valeurs négatives. Ceci s'applique pour les Heures, minutes, secondes, millisecondes, Donc la meilleure chose à faire est de, soit un chronomètre, ou les deux instances DateTime, l'un pour le début et une fin, var st =DateTime.Maintenant La Console.Write((DateTime.Maintenant - st).ToString())
- Double Possible de Mesurer les délais d'exécution du code
Vous devez vous connecter pour publier un commentaire.
Réponse ÉDITÉ sur la base des observations
Cette réponse, c'est seulement en essayant de compter le total écoulé en Millisecondes entre deux temps, où les temps sont directement issues de
DateTime.Now
. Que par la conversation, il est entendu queDateTime.Now
est vulnérable aux influences extérieures. Donc, la meilleure solution serait d'utiliser leStopwatch
classe. Voici un lien qui explique mieux (OMI), et aborde la les performances entre DateTimeNow, DateTime.Tiques, Chronomètre.Réponse Originale À Cette Question
La façon dont vous lancer dans un int est le problème. Vous avez besoin de plus de casting et quelques éléments supplémentaires 🙂
Cela peut paraître simple par rapport à l'efficacité de la minuterie. Mais il fonctionne:
Il y a un référence sur le web, vous voudrez peut-être vérifier ainsi.
DateTime.Now
renvoie l'heure du système dans un fichier du temps, qui peut varier un peu pour tout d'une douzaine de raisons.Stopwatch
laborieusement définit le nombre de système de tiques s'écouler par seconde/milliseconde/etc et, fondamentalement, met en place son propre environnement pour faire la mesure. C'est exactement ce que vous besoin à faire lorsque l'analyse comparative des choses comme ça, donc c'est reproductible.DateTime.Now
ne peut pas être influencé par des facteurs extérieurs. Considérant qu'il tire de ses valeurs plus précisément à partir de une ressource externe, je pense que vous allez trouver cela difficile.Vous êtes à la recherche pour le Chronomètre classe. Il est spécifiquement conçu pour ramener de haute précision des mesures de temps.
DateTime.Milliseconde renvoie simplement l'ordre de la milliseconde fraction de seconde, de 0 à 999. Vous devez prendre le reste de la datetime en compte lors de l'timings.
Cependant, vous devriez regarder à l'aide de la Chronomètre classe pour ces sortes de minutage des performances.
Voici ce que j'ai utilisé pour obtenir l'heure pour un calcul simple:
Cela fonctionne pour moi: