diff --git a/Src/Newtonsoft.Json.TestConsole/Program.cs b/Src/Newtonsoft.Json.TestConsole/Program.cs index 406f167d..178fa9d2 100644 --- a/Src/Newtonsoft.Json.TestConsole/Program.cs +++ b/Src/Newtonsoft.Json.TestConsole/Program.cs @@ -53,7 +53,7 @@ namespace Newtonsoft.Json.TestConsole //t.DeserializeLargeJson(); //PerformanceTests t = new PerformanceTests(); - SerializeJsonAsync(); + TokenWriteToAsync(); //t.Iterations = 50000; //t.BenchmarkDeserializeMethod(PerformanceTests.SerializeMethod.JsonNet, PerformanceTests.JsonText); @@ -96,6 +96,13 @@ namespace Newtonsoft.Json.TestConsole } } + public static void TokenWriteToAsync() + { + PerformanceTests t = new PerformanceTests(); + t.Iterations = 50000; + t.TokenWriteToAsync().Wait(); + } + public static void SerializeJsonAsync() { PerformanceTests t = new PerformanceTests(); diff --git a/Src/Newtonsoft.Json.Tests/PerformanceTests.cs b/Src/Newtonsoft.Json.Tests/PerformanceTests.cs index 6dcbaaf2..bde64843 100644 --- a/Src/Newtonsoft.Json.Tests/PerformanceTests.cs +++ b/Src/Newtonsoft.Json.Tests/PerformanceTests.cs @@ -146,6 +146,40 @@ namespace Newtonsoft.Json.Tests await BenchmarkSerializeMethodAsync(SerializeMethod.JsonNetManualAsync, test); } + [Test] + public void TokenWriteTo() + { + JObject o = JObject.Parse(JsonText); + + TimeOperation(() => + { + for (int i = 0; i < Iterations; i++) + { + StringWriter sw = new StringWriter(); + o.WriteTo(new JsonTextWriter(sw)); + } + + return o; + }, "TokenWriteTo"); + } + + [Test] + public async Task TokenWriteToAsync() + { + JObject o = JObject.Parse(JsonText); + + await TimeOperationAsync(async () => + { + for (int i = 0; i < Iterations; i++) + { + StringWriter sw = new StringWriter(); + await o.WriteToAsync(new JsonTextWriter(sw)); + } + + return o; + }, "TokenWriteTo"); + } + [Test] public void ReadLargeJson() { @@ -326,6 +360,24 @@ namespace Newtonsoft.Json.Tests return result; } + private async Task TimeOperationAsync(Func> operation, string name) + { + // warm up + await operation(); + + Stopwatch timed = new Stopwatch(); + timed.Start(); + + T result = await operation(); + + Console.WriteLine(name); + Console.WriteLine("{0} ms", timed.ElapsedMilliseconds); + + timed.Stop(); + + return result; + } + [Test] public void LargeArrayJTokenPathPerformance() {