嘿,最近,我一直在尝试寻找好的方法来平滑线程睡眠(以防线程睡眠受到干扰或计算机滞后等)。
那么,哪种是总体“更好的性能”方法?
JAVA针对C#的System.currentTimeMillis()方法:
public static double GetCurrentMilliseconds()
{
DateTime staticDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
TimeSpan timeSpan = DateTime.UtcNow - staticDate;
return timeSpan.TotalMilliseconds;
}
正在使用的System.currentTimeMillis():
public void Run()
{
this.lastUpdate = TimeUtilities.GetCurrentMilliseconds();
while (isRunning)
{
if (TimeUtilities.GetCurrentMilliseconds() - lastUpdate >= 600)
{
lastUpdate = TimeUtilities.GetCurrentMilliseconds();
// bla bla bla...
}
try
{
Thread.Sleep(100);
}
catch (Exception ex)
{
Jolt.GetLog().WriteException(ex);
}
}
}
和C#的Environment.TickCount:
private void Run()
{
double lastUpdate = Environment.TickCount;
while (isRunning)
{
if (lastUpdate + 600 < Environment.TickCount)
{
lastUpdate = Environment.TickCount;
// bla bla bla...
}
try
{
Thread.Sleep(100);
}
catch (Exception ex)
{
Jolt.GetLog().WriteException(ex);
}
}
}
任何帮助,将不胜感激。否则,如果这不是一个好主意,请您提供一种更好的方法来实现。
最佳答案
使用TickCount方法具有更好的性能,原因如下:
它是整数,而不是多字节数据结构
它是直接可用的,不需要各种计算
在性能方面,您不应使用double类型。要测量100秒的跨度,一个int应该足够。请注意,TickCount将在24天后从正数转换为负数,因此,如果您使用double,则在此时间之后不再使用TickCount。如果使用int,则应将其写为
if (Environment.TickCount-lastUpdate > 600)