对象与字典的一般性能从/到JSON

时间:2017-01-31 14:48:45

标签: c# .net performance object dictionary

我使用JSON.NET转换为JSON,用于服务器和客户端之间的数据传输。

我想问一下,在序列化和反序列化过程中是否存在性能上的一些重大差异,如果不是应用程序中的一般性能呢?

使用对象的速度比字典快吗?我的意思是读取变量,获取数组中某些索引的值等。或者是+ - 相同?

1 个答案:

答案 0 :(得分:1)

进行了一些测试,我的计算机需要5秒才能序列化和反序列化1 000 000个简单而非嵌套的对象。 使用字典大约需要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; }
    }