2016-12-21 3 views
0

Une partie de mon programme appelle une certaine méthode plusieurs fois.Différence de temps entre les appels d'une méthode

Comment cette méthode peut-elle suivre l'intervalle entre chaque appel?

Je pensais utiliser des variables globales:

var lastTime = ?; 
var currentTime = ?; 
var elapsedTime = ?; 

public DoSomething() 
{ 
    currentTime = TimeRightNowInSeconds; 
    elapsedTime = currentTime - lastTime; 
    // do stuff with elapsedTime... 
    lastTime = TimeRightNowInSeconds; 
} 

, mais je ne sais pas comment je mesure le temps en secondes.

+2

Eh, 'Stopwatch'? –

+0

https://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch(v=vs.110).aspx – ViVi

+1

Copie possible de [Mesurer le temps d'exécution en C#] (http://stackoverflow.com)/questions/3903222/measure-execution-time-in-c-sharp) – Backs

Répondre

0

Envisagez d'utiliser DateTime et TimeSpan (Veillez à utiliser DateTime.UtcNow pour éviter les problèmes avec les limites de la lumière du jour) économie

par exemple

var start = DateTime.UtcNow; 
... 
var end = DateTime.UtcNow; 
var elapsed = end.Subtract(start); //elapsed is a TimeSpan 
var elapsedSeconds = elsapsed.Seconds; 

Cela peut aussi être fait avec un Stopwatch (qui est plus précise et ne souffre pas de problèmes avec les limites d'heure d'été)

var stopwatch = Stopwatch.StartNew(); 
... 
stopwatch.Stop(); 
var elapsedSeconds = stopwatch.Elapsed.Seconds; //stopwatch.Elapsed is a TimeSpan 
+0

Quel type est écouléSecondes? Si ce n'est pas int, comment puis-je en faire un int? – theonlygusti

+0

Oui, c'est un int. – Stephan

0

Dans cette solution, vous verrez comment obtenir le temps entre la méthode appel Link

class Program 
{ 
    static Stopwatch _stopWatch = new Stopwatch(); // stopwatch 
    static long _lastTime; // time in milliseconds 


    static void Main(string[] args) 
    { 
    /* _lastTime will be 0 when first call ElapsedTime(). */ 
    ElapsedTime(); 

    /* Hold the current thread for 1000 milliseconds */ 
    Thread.Sleep(1000); 

    /* _lastTime will be 1000 when second call ElapsedTime(). */ 
    ElapsedTime(); 
    Thread.Sleep(2000); 

    /* _lastTime will be 3000 when third call ElapsedTime(). */ 
    ElapsedTime(); 

    /* Thread.Sleep() is to simulate time between the calls of the method */ 
    /* _lastTime is in milliseconds*/ 
    } 


    public static void ElapsedTime() 
    { 
    // check if stopwatch already started once 
    if (_stopWatch .IsRunning) 
    { 
     /* get the totlal elapsed milliseconds */ 
     _lastTime += _stopWatch .ElapsedMilliseconds; 
     /* Restart stopwatch */ 
     _stopWatch .Restart(); 
     } 
     else 
     { 
     _stopWatch .Start(); 
     } 

    Console.WriteLine(_lastTime); 
    } 
}