一种实时获取自上次调用方法以来经过的毫秒数的方法
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
。
我正在调用更新函数来绘制实时模拟,想知道是否有有效的方法来获取自上次更新以来经过的毫秒数?目前,我有一个 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
。