我使用JSON.NET转换为JSON,用于服务器和客户端之间的数据传输。
我想问一下,在序列化和反序列化过程中是否存在性能上的一些重大差异,如果不是应用程序中的一般性能呢?
使用对象的速度比字典快吗?我的意思是读取变量,获取数组中某些索引的值等。或者是+ - 相同?
答案 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; }
}