Quelle est la Meilleure façon de calculer le laps de temps
Dans mon programme c#, mon exigence est de calculer un temps pour les affaires de l'exécution de la logique qui est à l'intérieur d'une boucle foreach j'ai pour stocker laps de temps.
Je suis à l'aide de code suivant
for (int i = 0; i < 100; i++)
{
DateTime start= DateTime.Now;
//Business logic
DateTime end= DateTime.Now;
TimeSpan time = start.Subtract(end);
//Save timespan in log file
}
S'il vous plaît corrigez-moi si je suis en utilisant la droite de code, ou dois-je modifier pour une meilleure performance et le résultat.
Je pense que vous seriez plus intéressé par Chronomètre
À l'aide de
Double Possible de Est de type DateTime.Maintenant, la meilleure façon de mesurer un rendement de la fonction?
À l'aide de
DateTime.Now
au lieu de DateTime.UtcNow
est presque jamais la bonne chose à faire (mais Chronomètre est préférable dans ce cas de toute façon).Double Possible de Est de type DateTime.Maintenant, la meilleure façon de mesurer un rendement de la fonction?
OriginalL'auteur Hemant Kothiyal | 2011-12-29
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser un
Chronomètre
. LeStopwatch
est beaucoup plus précis pour la mesure du temps que le mur de l'horloge temps.OriginalL'auteur Albin Sunnanbo
La façon la plus simple serait de:
Sinon, vous pouvez utiliser un chronomètre qui donne des résultats plus précis. Voir http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx sur la façon de travailler avec un chronomètre.
OriginalL'auteur Pieter van Ginkel
On dirait que vous êtes en utilisant la plage de temps pour mesurer le rendement. Votre code est bien, mais vous devez être conscient que DateTimes le sont de façon précise (environ 10-15ms sur la plupart des ordinateurs -- voir les "Inutiles Minuterie Mécanisme de la section" ici pour une explication).
DateTimes sont pas contigus; si le premier DateTime est récupéré juste avant l'heure d'été des coups de pied dans, et le dernier juste après? Une opération qui prend une seconde pourrait apparaître comme une heure, ou même de temps négatif. Même avec toutes les heures au format UTC, il y a des problèmes potentiels lorsque l'utilisateur change l'heure manuellement, ou de sauts causée par l'ordinateur d'aller dormir et de se réveiller, etc.
Une meilleure alternative serait d'utiliser la
Chronomètre
de la classe, qui est conçu pour ce genre de chose et utilise un timer haute précision en interne (via leQueryPerformanceCounter()
fonction Win32).OriginalL'auteur Cameron
Pour répondre à vos questions de suivi, (1) vous avez raison, vous n'avez pas besoin de retrouver un Chronomètre à chaque itération. Vous avez juste besoin d'utiliser la méthode de redémarrage, comme suit:
(2), Vous auriez probablement avoir à écrire quelques lignes de code pour renvoyer la valeur en secondes si moins d'une minute, et les minutes s'il est supérieur, mais ici, serait un exemple de cela (suppose que c'est la ligne droite après l'enregistrement de la plage de temps à partir de l'exemple ci-dessus):
Cet exemple utilise un Opérateur Ternaire pour enregistrer le nombre entier le nombre de minutes ou de secondes.
OriginalL'auteur Aaron Deming