Проблема с производительностью Newtonsoft Json.NET в Visual Studio 2017 - PullRequest
0 голосов
/ 26 октября 2018

У меня проблема с производительностью сериализатора 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;
    }
}

Кто-нибудь сталкивался с подобными проблемами?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...