上一篇文章 物件輸出的 JSON 按照 Property Name 排序的兩種方法 ,其中提供兩種方法來做到排序物件後 JSON輸出
這時候我同事問我要採用哪一種,其實我也不知道,反正文章都寫了範例程式稍微小改一下,直接測速吧
因為只是測試,所以相關文章請去參考 物件輸出的 JSON 按照 Property Name 排序的兩種方法 ,然後我各跑一千萬次
跑五輪測試成績
直接上程式碼
var user1 = new User { Birth = DateTime.Now, Id = "USER1", Memo = "I am User1", Salary = 1_000_000 };
var user2 = new User { Birth = DateTime.Now, Id = "USER2", Memo = "I am User2", Salary = 2_000_000 };
var user3 = new User { Birth = DateTime.Now, Id = "USER3", Memo = "I am User3", Salary = 3_000_000 };
user1.Friends.Add(user2);
user1.Friends.Add(user3);
for (var i = 1; i <= 5; i++)
{
Console.WriteLine("第 " + i +"輪千萬測試" );
Stopwatch sw = new Stopwatch();
sw.Start();
Parallel.For(0, 10_000_000,
index =>
{
var json = JsonConvert.SerializeObject(user1);
});
sw.Stop();
Console.WriteLine("沒有排序:" + sw.Elapsed);
sw.Restart();
Parallel.For(0, 10_000_000,
index =>
{
var sortJObjet = SortPropertiesAlphabetically(JObject.FromObject(user1));
var result = JsonConvert.SerializeObject(sortJObjet);
});
Console.WriteLine("透過 JObject:" + sw.Elapsed);
sw.Stop();
sw.Restart();
Parallel.For(0, 10_000_000,
index =>
{
var expando = new ExpandoObject();
var dictionary = (IDictionary)expando;
foreach (var property in user1.GetType().GetProperties().OrderBy(x => x.Name))
{
dictionary.Add(property.Name, property.GetValue(user1));
}
var result = JsonConvert.SerializeObject(dictionary);
});
sw.Stop();
Console.WriteLine("透過 ExpandoObject:" + sw.Elapsed);