【问题标题】:Time.time vs DateTime.UtcNow.Millisecond performance in Unity3D?Unity3D 中的 Time.time 与 DateTime.UtcNow.Millisecond 性能?
【发布时间】:2017-03-13 01:34:41
【问题描述】:

我需要在使用 Unity 构建的多人游戏中大量跟踪时间,以便知道数据包何时进入。Unity、Time.time 或 DateTime.UtcNow.Millisecond 哪个性能更好?性能差异会有多大?

【问题讨论】:

  • Uuuh ...这两个给出的值意味着不同的东西。 Time.time 以秒为单位为您提供自游戏开始后的时间。这与DateTime.UtcNow.Millisecond 完全不同,后者为您提供 UTC 的系统时间。您可能想要后者。
  • @Serlite 我认为 OP 知道这一点。您可以通过减去它们来将它们用于计时器。我认为 OP 想知道哪个更快或推荐。
  • @Programmer 使用更适合时间戳的那个似乎是合乎逻辑的,这就是为什么我怀疑 OP 可能是错误的......(没有在客户端做额外的数学运算,从开始的游戏对于多人游戏中的数据排序并不是非常有用,因为它会因每个玩家而异)。
  • 此问题仅用于在客户端跟踪时间戳

标签: c# performance unity3d mono unity5


【解决方案1】:

最好自己测试一下。您是最了解您的应用的人,并且可以判断在特定条件下什么是最佳解决方案。这是一些您可以使用的简单测试脚本。它只是使用 unity/c# 方法保存当前时间戳并记录该操作所需的时间。

public class TimeTest : MonoBehaviour
{
    public bool UseUnityFuntion;

    private string msg;

    void Update ()
    {
        var stopwatch = Stopwatch.StartNew();
        msg = UseUnityFuntion 
            ? Time.time.ToString() 
            : DateTime.UtcNow.Millisecond.ToString();
        stopwatch.Stop();
        UnityEngine.Debug.Log(stopwatch.ElapsedTicks);
    }

    void OnGUI()
    {
        if (msg != null) GUILayout.Label(msg);
    }
}

与大多数情况一样,这次非统一函数似乎更快。至少在我的电脑上。不知道您的应用程序将如何工作,但请记住,使用毫秒值时可能会发生冲突。 使用 Time.time 还有一个缺点 - 您只能在主线程中执行此操作。当您有网络应用程序时,您很有可能希望在后台线程上保存时间戳。

【讨论】:

    【解决方案2】:

    为了测试性能,我建议:

    • 不在分析部分中使用 ToString()
    • 由于分支预测,不使用可能偏爱路径的分支
    • 如有必要,重复多次以确保秒表的分辨率足够,并且秒表调用成本的任何潜在变化都是微不足道的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-10
      • 2020-11-27
      • 2011-10-21
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      相关资源
      最近更新 更多