一种实时获取自上次调用方法以来经过的毫秒数的方法

A way to get the number of milliseconds in real time passed since the last call of a method

我正在调用更新函数来绘制实时模拟,想知道是否有有效的方法来获取自上次更新以来经过的毫秒数?目前,我有一个 DispatchTimer 定期调用来更新模拟,但时间不够准确,最终比应有的速度慢了大约 60%(它会变化)。

保留一个不会在调用之间重置的变量。
你的可能不需要像我的那样是静态的。

private static DateTime _LastLogTime = DateTime.Now;

然后在方法内:

// This ensures only the exact one Tick is used for subsequent calculations
// Instead of calling DateTime.Now again and getting different values
DateTime NewTime = DateTime.Now;

TimeSpan ElapsedTime = NewTime - _LastLogTime;
_LastLogTime = NewTime;

string LogMessage = string.Format("{0,7:###.000}", ElapsedTime.TotalSeconds);

我只需要在我的字符串中精确到千分之一秒,但您可以使用生成的 TimeSpan 获得更准确的结果。

在生成的 TimeSpan 中还有一个 .TotalMilliseconds 甚至 .Ticks 最准确的 )值可用。

我会使用 Stopwatch.GetTimestamp() 来获取滴答计数,然后比较前后的值。您可以通过以下方式将其转换为计时:

var startTicks = Stopwatch.GetTimestamp();
// Do stuff
var ticks = Stopwatch.GetTimestamp() - startTicks;

double seconds = ticks / Stopwatch.Frequency;
double milliseconds = (ticks / Stopwatch.Frequency) * 1000;
double nanoseconds = (ticks / Stopwatch.Frequency) * 1000000000;

如果你只是想为不同的代码块计时,你也可以在之后使用 var sw = Stopwatch.StartNew();sw.Elapsed.TotalMilliseconds