嘿,最近,我一直在尝试寻找好的方法来平滑线程睡眠(以防线程睡眠受到干扰或计算机滞后等)。

那么,哪种是总体“更好的性能”方法?

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)

10-07 13:40