2017-03-13 13 views
4

ユニティで構築されたマルチプレイヤーゲームでは、データのパケットがいつ入ってきたかを知るために、多くの時間を記録する必要があります。Unity、Time.time、DateTime.UtcNow.Millisecondのパフォーマンスはどうでしょうか?パフォーマンスの違いはどれくらい違いますか?Unity.3DのTime.timeとDateTime.UtcNow.Millisecondのパフォーマンス?

+0

https://ericlippert.com/2012/12/17/performance-rant/ – DavidG

+0

Uuuh ...これらの2つの値は異なるものを意味します。 ['Time.time'](https://docs.unity3d.com/ScriptReference/Time-time.html)は、ゲームが始まってから**秒単位の時間を与えます**。これは 'DateTime.UtcNow.Millisecond'とはまったく異なります。これは、システム時刻をUTCで示しています。あなたはおそらく後者が欲しい。 – Serlite

+0

@Serlite私はOPがこれを知っていると思います。それらの値を減算することで、両方の値をタイマーに使用できます。私はOPがどちらが速いか、または推奨されているかを知りたいと思う。 – Programmer

答えて

2

自分でテストするのが最善です。あなたはあなたのアプリケーションを最もよく知っており、特定の条件で最適な解決策が何であるかを知ることができます。これは簡単なテストスクリプトです。現在のタイムスタンプを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); 
    } 
} 

ほとんどの場合と同様に、今回は非ユニティ機能が高速であるようです。少なくとも私のPC上で。どのようにアプリケーションが動作するのか分かりませんが、Miliseconds値を使用するときに衝突する可能性があることに注意してください。 Time.timeを使用することの欠点も1つあります。これはメインスレッドでのみ実行できます。ネットワークアプリケーションを使用している場合は、タイムスタンプをバックグラウンドスレッドに保存する可能性が高くなります。