2016-12-21 7 views
0

Одна часть моей программы несколько раз вызывает определенный метод.Разница во времени между вызовами метода

Как этот метод отслеживает время между каждым его вызовом?

Я думал использовать некоторые глобальные переменные:

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

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

, но я понятия не имею, как я измеряю время в секундах.

+2

Eh, 'Stopwatch'? –

+0

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

+1

Возможный дубликат [Измерение времени выполнения на C#] (http://stackoverflow.com/questions/3903222/measure-execute-time-in-c-sharp) – Backs

ответ

0

Рассмотрите возможность использования DateTime и TimeSpan (Будьте осторожны, чтобы использовать DateTime.UtcNow, чтобы избежать проблем с границами экономии дневного света)

например

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

Это также может быть сделано с Stopwatch (который является более точным и не страдает от проблем с сохранением дневного света границ)

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

Какой тип истек? Секунды? Если не int, как мне сделать int? – theonlygusti

+0

Да, это инт. – Stephan

0

В этом решении вы увидите, как получить время между вызовом метода 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); 
    } 
}