JsonConvert.DeserializeObject如何在内部工作?

时间:2017-11-07 07:56:06

标签: c# json parsing json.net

最近,尝试使用NewtonSoft API查找将Json字符串解析为相应C#对象所用的时间。

我正在使用自己的Json解析器代码将Json字符串转换为C#对象。

所以,想想比较这两件事的时间。

这是我尝试过的: -

练习1: -

for(int i=0;i<2;i++)
{
var inputText = File.ReadAllText("TextFile1.txt");            

var st = DateTime.Now;
var obj = JsonConvert.DeserializeObject<Text1Root>(inputText);
var end = DateTime.Now;
Console.WriteLine("NewtonJsoft: " + (end - st).Milliseconds);

var st1 = DateTime.Now;
var generatedObj = ConvertJsonStrToClassStructure<Text1Root>
(inputText); //My parser code
var en1 = DateTime.Now;
Console.WriteLine("Custom: " + (en1 - st1).Milliseconds);
}

生成的输出: -

enter image description here

练习2: -

var inputText = File.ReadAllText("TextFile1.txt");
Console.WriteLine("For TextFile1.txt");
var st = DateTime.Now;
dynamic obj = JsonConvert.DeserializeObject<Text1Root>(inputText);
var end = DateTime.Now;
Console.WriteLine("NewtonJsoft: " + (end - st).Milliseconds);
var st1 = DateTime.Now;
dynamic generatedObj = ConvertJsonStrToClassStructure<Text1Root>
(inputText);
var en1 = DateTime.Now;
Console.WriteLine("Custom: " + (en1 - st1).Milliseconds);

inputText = File.ReadAllText("TextFile2.txt");
Console.WriteLine("For TextFile2.txt");
st = DateTime.Now;
obj = JsonConvert.DeserializeObject<Text2Root>(inputText);
end = DateTime.Now;
Console.WriteLine("NewtonJsoft: " + (end - st).Milliseconds);
st1 = DateTime.Now;
generatedObj = ConvertJsonStrToClassStructure<Text2Root>(inputText);
en1 = DateTime.Now;
Console.WriteLine("Custom: " + (en1 - st1).Milliseconds);

生成的输出: -

enter image description here

实例3: -

var st = DateTime.Now;
var obj = JsonConvert.DeserializeObject<Text1Root>(inputText);
var end = DateTime.Now;
Console.WriteLine("NewtonJsoft: " + (end - st).Milliseconds);

生成的输出: -

enter image description here

对于Ex1: -
对于JsonConvert.DeserializeObject&lt;&gt;(“”)的第一次运行,需要一些时间来处理,但是在下一次运行中 在循环中,花了近0米秒。它是否在内部使用任何类型的缓存?我试着查看MemCache对象。但遗憾的是没有任何东西。

对于Ex2: -
为了处理TextFile1.txt,花了一些时间。但是在处理TextFile2.txt时,花了很短的时间。

对于Ex3: -
为了测试,我只需要解析NewtonSoft代码。这一次,我每次都重新启动应用程序,检查NewtonSoft实际上是否花费了微不足道的时间来解析输入。但是在每次运行中,需要花费一些时间来解析150毫秒(app)。

所以,我没有任何线索,
 1.在连续运行中,如何在可忽略的时间内将字符串解析为C#  2.如何在第一次运行中花费一些时间进行解析/或者如何在解析每次重新启动应用程序时花费时间。
 3. NewtonSoft是否正在使用内部缓存等任何其他内容。如果是这样,  有没有办法可以关闭这种行为。

任何人都可以就这一点提出一些意见。

感谢。

0 个答案:

没有答案