La logique principale d'un outil utilitaire est en fonction comme ceci:System.DateTime.Now donne de mauvais résultats
private void Run()
{
DateTime startTime = DateTime.Now;
Prepare();
Search();
Process();
DateTime endTime = DateTime.Now;
TimeSpan duration = endTime.Subtract(startTime);
Console.WriteLine("Run took {0:00}:{1:00}:{2:00}",
(int)duration.TotalHours, duration.Minutes, duration.Seconds);
}
Quand je lance ce que je peux voir de mes propres yeux, il prend au moins 5 secondes (Process()
méthode Spews sortie de la console que je peux observer se passe pendant 5-6s). Mais il rapporte "Run a pris 00:00:01".
Je ne m'attends pas à ce que le temps ait une précision de l'ordre de la microseconde, mais pourquoi est-ce si totalement inexact ici?
Mise à jour: Après avis J'ai aussi couru un StopWatch
sur la même période et comparé à la soustraction de deux DateTime
, et aussi débogué le code. Les deux méthodes acceptent une fraction de seconde ... StopWatch
dans le débogueur avait 1139 millisecondes. Mon hypothèse est que d'une manière ou d'une autre l'écriture de temps sur la console n'est pas incluse mais je n'ai aucun moyen de la sauvegarder (ou de la réfuter).
Avez-vous essayé de le déboguer? –
Je suppose que vous devriez utiliser un [Chronomètre] (http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch%28v=vs.80%29.aspx) et aussi jeter un coup d'oeil [ici ] (http://stackoverflow.com/questions/8754018/recommended-method-to-calculate-the-difference-between-two- timespans/8754105#8754105) – V4Vendetta
Connaissez-vous la classe 'System.Diagnostics.Stopwatch' ? – spender