public ExampleObj(Random rand) { String = RandomString(rand); Char = RandomChar(rand); Long = RandomLong(rand); Int = RandomInt(rand); Short = RandomShort(rand); Byte = RandomByte(rand); ULong = (ulong)RandomLong(rand); UInt = (uint)RandomInt(rand); UShort = (ushort)RandomShort(rand); SByte = (sbyte)RandomByte(rand); List = Enumerable.Range(0, rand.Next(10)).Select(_ => RandomString(rand)).ToList(); Array = Enumerable.Range(0, rand.Next(10)).Select(_ => RandomString(rand)).ToArray(); Dictionary = Enumerable.Range(0, rand.Next(10)).ToDictionary(_ => RandomString(rand), _ => RandomString(rand)); RecurseObj = rand.Next(2) == 0 ? new ExampleObj(rand) : null; }
static void Main(string[] args) { var random = new Random(27291702); var obj = ExampleObj.RandomString(random); Func <string> stream = () => { using (var writer = new StringWriter()) { Jil.JSON.Serialize(obj, writer); return(writer.ToString()); } }; Func <string> str = () => { return(Jil.JSON.Serialize(obj)); }; // prime for (var i = 0; i < 5; i++) { var streamRes = stream(); var strRes = str(); if (streamRes != strRes) { throw new Exception("Uhhhhh"); } } const int Iterations = 1000000; TimeSpan streamTime; { System.GC.Collect(3, GCCollectionMode.Forced, true); var streamTimer = new Stopwatch(); streamTimer.Start(); for (var i = 0; i < Iterations; i++) { stream(); } streamTimer.Stop(); streamTime = streamTimer.Elapsed; } TimeSpan strTime; { System.GC.Collect(3, GCCollectionMode.Forced, true); var strTimer = new Stopwatch(); strTimer.Start(); for (var i = 0; i < Iterations; i++) { str(); } strTimer.Stop(); strTime = strTimer.Elapsed; } Console.WriteLine("Stream: " + streamTime.TotalMilliseconds + "ms"); Console.WriteLine("String: " + strTime.TotalMilliseconds + "ms"); Console.WriteLine(); Console.WriteLine("Delta: " + (streamTime - strTime).TotalMilliseconds + "ms"); }