You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "ASF GitHub Bot (Jira)" <ji...@apache.org> on 2020/04/01 10:02:00 UTC

[jira] [Commented] (TINKERPOP-2349) Switch from Newtonsoft.Json to System.Text.Json

    [ https://issues.apache.org/jira/browse/TINKERPOP-2349?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17072603#comment-17072603 ] 

ASF GitHub Bot commented on TINKERPOP-2349:
-------------------------------------------

FlorianHockmann commented on pull request #1273: TINKERPOP-2349 Migrate JSON serialization to System.Text.Json in Gremlin.NET
URL: https://github.com/apache/tinkerpop/pull/1273
 
 
   https://issues.apache.org/jira/browse/TINKERPOP-2349
   
   .NET Core 3.0 is added as a target framework as it already includes support for `System.Text.Json` and therefore doesn't need the NuGet package.
   
   Results from a simple benchmark with BenchmarkDotNet showed that this improves the performance of the deserialization roughly by a factor of 2. The deserialization now also allocates far less memory, by a factor of ~7 which also results in less garbage collections. The performance of the serialization however stayed basically the same. It got even slightly slower by ~4% in this benchmark, but it also
   allocates a bit less memory (-12%). This seems acceptable in my opinion, given that it is only a very small increase, especially compared to the differences for the deserialization and because it allocates less
   memory now.
   
   Output from BenchmarkDotNet:
   
   Before:
   
   |          Method |     Mean |    Error |   StdDev |  Gen 0 |  Gen 1 | Gen 2 | Allocated |
   |---------------- |---------:|---------:|---------:|-------:|-------:|------:|----------:|
   |   Serialization | 22.41 us | 0.616 us | 0.659 us | 1.5564 |      - |     - |   9.72 KB |
   | Deserialization | 40.50 us | 1.075 us | 1.150 us | 6.3477 | 0.6104 |     - |  39.06 KB |
   
   After:
   
   |          Method |     Mean |    Error |   StdDev |  Gen 0 | Gen 1 | Gen 2 | Allocated |
   |---------------- |---------:|---------:|---------:|-------:|------:|------:|----------:|
   |   Serialization | 23.25 us | 0.103 us | 0.091 us | 1.3733 |     - |     - |   8.58 KB |
   | Deserialization | 25.89 us | 0.583 us | 0.545 us | 0.9155 |     - |     - |   5.74 KB |
   
   Another advantage of using System.Text.Json is that it supports [`Span<T>`](https://docs.microsoft.com/en-us/archive/msdn-magazine/2018/january/csharp-all-about-span-exploring-a-new-net-mainstay) so we could make use of that in the future to reduce memory allocations in the driver even more.
   
   VOTE +1
 
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


> Switch from Newtonsoft.Json to System.Text.Json
> -----------------------------------------------
>
>                 Key: TINKERPOP-2349
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-2349
>             Project: TinkerPop
>          Issue Type: Improvement
>          Components: dotnet
>            Reporter: Florian Hockmann
>            Assignee: Florian Hockmann
>            Priority: Major
>
> .NET Core 3.0 [came with a new built-in JSON serialization library|https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-apis/] _System.Text.Json_ which probably becomes the standard JSON library for .NET. It offers a better performance while allocating less memory compared to Newtonsoft.Json because it is using new technologies such as {{Span<T>}}.
> For users of .NET Core 3.x this also has the nice benefit that the JSON implementation is directly included in the .NET Core framework which solves possible version conflicts.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)