2016-06-15 2 views
0

J'ai un bloc de code qui doit calculer la durée d'exécution du code. La méthode où le bloc est appelé toutes les secondes via DispatcherTimer. Comme vous pouvez le voir sur la photo, un span4.totalseconds est sur 0, mais la durée (DateTimeOffset.Now - now2) est d'environ 1 seconde.Problème avec TimeSpan totalseconds dans C#

What's going on?

//some code here 
span4 = DateTimeOffset.Now - now2; 
someInfo.Text = (DateTimeOffset.Now - now2).TotalSeconds.ToString(); 
now2 = DateTimeOffset.Now; 
+2

pour mesurer le temps d'exécution de code j'utiliser une classe StopWatch, mais peut-être j'ai mal compris votre problème – Steve

+1

'DateTimeOffset.Now' signifie en fait maintenant-maintenant. Vous obtenez l'heure au moment de l'évaluation, c'est-à-dire lorsque vous ajoutez la montre. La seconde maintenant pourrait facilement être appelée 1 seconde après la première Maintenant lors du débogage –

+0

@Steve Je n'ai pas besoin exactement du temps d'exécution mais plutôt du temps entre différents appels de méthode via Timer.Tick. –

Répondre

2

parce que DateTimeOffset.Now aura une valeur diferent chaque fois que vous l'appelez ... pourquoi vous faites la même deux fois soustractions? essayer:

span4 = DateTimeOffset.Now - now2; 
someInfo.Text = (span4).TotalSeconds.ToString(); 
now2 = DateTimeOffset.Now; 
+0

le problème est que span4.totalseconds est égal à 0, mais si je regarde (DateTimeOffset.Now - now2) .TotalSeconds c'est égal à environ 1 seconde. La valeur correcte est 1 seconde? bien que. –

+0

la valeur correcte dépendra du moment où vous l'appelez, cette valeur changera toutes les secondes – lem2802

+0

Je l'appelle toutes les secondes via DispatcherTimer –

2

La façon dont vous mesurez le temps d'exécution en .Net utilise la classe Chronomètre:

Stopwatch stopWatch = new Stopwatch(); 
stopWatch.Start(); 
Thread.Sleep(10000); 
stopWatch.Stop(); 

// Get the elapsed time as a TimeSpan value. 
TimeSpan ts = stopWatch.Elapsed; 
+1

Vrai, mais n'explique pas le problème de l'OP. Je suis tout à fait sûr que le même problème (une seconde de différence) se produira également avec le 'Stopwatch'. –