2017-01-31 16 views
0

私はJSON.NETを私がサーバーとクライアント間のデータ転送に使用するJSONに変換するために使用しています。オブジェクトの一般的なパフォーマンスと辞書のJSONから/へJSON

シリアライゼーションとデシリアライズ時にパフォーマンスに大きな違いがあるのか​​、それともアプリケーションの一般的なパフォーマンスはどうですか?

オブジェクトの処理速度が速く、辞書が多いですか?変数を読み込み、配列などのいくつかのインデックスの値を取得することを意味します。

+0

辞書のデータにアクセスすると、キーの検索が実行されます。オブジェクトのプロパティを使用すると、アクセスは直接行われます。要素数が少ないとその差は小さくなりますが、多くのプロパティがある場合は目立ちます。 – Gusman

+0

オブジェクトから辞書を生成するのに必要な時間を含めると、速度差は消えます。あなたのコードは読めなくなるでしょう。 –

+0

@Gusman何個の要素について話していますか?何十?何百?私は10-15以上の要素を使っていないからです。 –

答えて

1

いくつかのテストは、私のコンピュータで5秒かかると、シンプルでネストされたオブジェクトではなく、100000000をシリアライズしてデシリアライズしました。 辞書では約4秒かかるので、実際には問題になりません。

柔軟性のためにオブジェクトの使用をお勧めします。 .NETのインデクサーによる辞書からの値の取得は、常にO(1)になります。

public void TestSerialization() 
    { 
     var loops = 1000000; 

     var w1 = new Stopwatch(); w1.Start(); 
     for (int i = 0; i < loops; i++) 
     { 
      var serializedDic = JsonConvert.SerializeObject(new Dictionary<string, string>() { { "Color", "Blue" }, { "Price", "5" } }); 
      var deserializedDic = JsonConvert.DeserializeObject(serializedDic); 
     } 
     w1.Stop(); 
     Debug.WriteLine(w1.Elapsed); //4.37 sec 

     var w2 = new Stopwatch(); w2.Start(); 
     for (int i = 0; i < loops; i++) 
     { 
      var serializedObj = JsonConvert.SerializeObject(new CarObj() { Color = "blue", Price = 5 }); 
      var deserializedObj = JsonConvert.DeserializeObject(serializedObj); 
     } 
     w2.Stop(); 
     Debug.WriteLine(w2.Elapsed); //5.57 sec 
    } 

    public class CarObj 
    { 
     public string Color { get; set; } 
     public float Price { get; set; } 
    } 
+0

ありがとう!しかし、柔軟性というのはどういう意味ですか?私の場合、辞書ははるかに柔軟であると思います。 JSONメッセージに別のパラメータを追加したい場合は、別のキーを単純に追加できますが、オブジェクトの場合はクラスを書き直す必要があります。そして、デシリアライゼーションはどうすれば私のjsonオブジェクトが下にある正しいクラスを見つけることができますか?浮動小数点の代わりにintになる別のクラスのCarを定義するとどうなりますか? 'JsonConvert.DeserializeObject(serializedObj)'はどのデータ型ですか? –

+0

質問1:ネストしたオブジェクトを持つことができるので柔軟性があり、操作したい情報を簡単に拡張できます。私は辞書でこれを行うには簡単な方法はないと思う2質問:JsonConvert.DeserializeObject(serializedDic、typeof(CarObj)) –

+0

のようにjson .netの逆シリアル化から結果オブジェクトの型を指定することができます見てください:)ありがとう! –

関連する問題