У меня проблема с производительностью сериализатора Newsonoft Json после перехода с Visual Studio 2015 на 2017. В нашем проекте нам нужно сохранить много сериализованных данных, и разница между обеими версиями VS значительна.
Visual Studio 2017
- режим отладки: ~ 382 мс до 437 мс
- режим выпуска: ~ 200 мс
Visual Studio 2015
- режим отладки: от ~ 235 мс до 293 мс
- режим сброса: ~ 150 мс
Для оценки производительности я использовал этот код:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
var testObj = new SampleObject();
NewtonJsonTest newtonJsonTest = new NewtonJsonTest();
stopwatch.Start();
for (int j = 0; j < 10000; j++)
{
newtonJsonTest.Serialize("C:\\Projects\\TEMP_JSON\\Newton.json", testObj);
}
stopwatch.Stop();
Console.WriteLine("Serialize Time: {0}ms", NewtonJsonTest.stopwatch.ElapsedMilliseconds);
Console.WriteLine("Overall Time: {0}ms", stopwatch.ElapsedMilliseconds);
//TimeLabel.Content = "Serialize Time: " + NewtonJsonTest.stopwatch.ElapsedMilliseconds + "ms, Overall Time: " + stopwatch.ElapsedMilliseconds + "ms";
}
}
public class SampleObject
{
public string var1 = "1111111111";
public string var2 = "2222222222";
public string var3 = "3333333333";
public int var4 = 123123123;
}
Класс с сериализацией:
public class NewtonJsonTest
{
public static System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
public bool Serialize(string location, object obj, Formatting format = Formatting.Indented)
{
string blockJson;
using (FileStream stream = File.Create(location))
{
stopwatch.Start();
blockJson = JsonConvert.SerializeObject(obj, format);
stopwatch.Stop();
var data = UTF8Encoding.UTF8.GetBytes(blockJson);
stream.Write(data, 0, data.Length);
};
return true;
}
}
Кто-нибудь сталкивался с подобными проблемами?