| 
					
				 | 
			
			
				@@ -53,7 +53,7 @@ namespace Google.ProtocolBuffers.ProtoBench 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private static TimeSpan MinSampleTime = TimeSpan.FromSeconds(2);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private static TimeSpan TargetTime = TimeSpan.FromSeconds(30);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        private static bool Verbose = false, FastTest = false;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        private static bool Verbose = false, FastTest = false, OtherFormats = false;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // Avoid a .NET 3.5 dependency
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         private delegate void Action();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -67,6 +67,7 @@ namespace Google.ProtocolBuffers.ProtoBench 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             List<string> temp = new List<string>(args);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Verbose = temp.Remove("/verbose") || temp.Remove("-verbose");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            OtherFormats = temp.Remove("/formats") || temp.Remove("-formats");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (true == (FastTest = (temp.Remove("/fast") || temp.Remove("-fast"))))
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 TargetTime = TimeSpan.FromSeconds(10);
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -132,19 +133,23 @@ namespace Google.ProtocolBuffers.ProtoBench 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ByteString inputString = ByteString.CopyFrom(inputData);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 IMessage sampleMessage = defaultMessage.WeakCreateBuilderForType().WeakMergeFrom(inputString, registry).WeakBuild();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                byte[] jsonBytes, xmlBytes;/*no pun intended, well... maybe for xml*/
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                using (MemoryStream temp = new MemoryStream())
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                IDictionary<string, object> dictionary = null;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                byte[] jsonBytes = null, xmlBytes = null;/*no pun intended, well... maybe for xml*/
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (OtherFormats)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    XmlFormatWriter.CreateInstance(temp).WriteMessage(sampleMessage);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    xmlBytes = temp.ToArray();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    using (MemoryStream temp = new MemoryStream())
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        XmlFormatWriter.CreateInstance(temp).WriteMessage(sampleMessage);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        xmlBytes = temp.ToArray();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    using (MemoryStream temp = new MemoryStream())
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        JsonFormatWriter.CreateInstance(temp).WriteMessage(sampleMessage);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        jsonBytes = temp.ToArray();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    dictionary = new Dictionary<string, object>(StringComparer.Ordinal);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    new DictionaryWriter(dictionary).WriteMessage(sampleMessage);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                using (MemoryStream temp = new MemoryStream())
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    JsonFormatWriter.CreateInstance(temp).WriteMessage(sampleMessage);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    jsonBytes = temp.ToArray();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                IDictionary<string, object> dictionary = new Dictionary<string, object>(StringComparer.Ordinal);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                new DictionaryWriter(dictionary).WriteMessage(sampleMessage);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //Serializers
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if(!FastTest) RunBenchmark("Serialize to byte string", inputData.Length, () => sampleMessage.ToByteString());
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -152,23 +157,25 @@ namespace Google.ProtocolBuffers.ProtoBench 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (!FastTest) RunBenchmark("Serialize to memory stream", inputData.Length,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                           () => sampleMessage.WriteTo(new MemoryStream()));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                RunBenchmark("Serialize to xml", xmlBytes.Length, () =>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    XmlFormatWriter.CreateInstance(new MemoryStream(), Encoding.UTF8).WriteMessage(sampleMessage);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } );
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                RunBenchmark("Serialize to json", jsonBytes.Length, () => 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (OtherFormats)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    JsonFormatWriter.CreateInstance().WriteMessage(sampleMessage); 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                RunBenchmark("Serialize to json via xml", jsonBytes.Length,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    () =>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        XmlFormatWriter.CreateInstance(JsonReaderWriterFactory.CreateJsonWriter(new MemoryStream(), Encoding.UTF8))
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            .SetOptions(XmlWriterOptions.OutputJsonTypes)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            .WriteMessage(sampleMessage)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                );
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                RunBenchmark("Serialize to dictionary", sampleMessage.SerializedSize, () => new DictionaryWriter().WriteMessage(sampleMessage));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    RunBenchmark("Serialize to xml", xmlBytes.Length, () =>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        XmlFormatWriter.CreateInstance(new MemoryStream(), Encoding.UTF8).WriteMessage(sampleMessage);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    RunBenchmark("Serialize to json", jsonBytes.Length, () =>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        JsonFormatWriter.CreateInstance().WriteMessage(sampleMessage);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    RunBenchmark("Serialize to json via xml", jsonBytes.Length,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        () =>
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            XmlFormatWriter.CreateInstance(JsonReaderWriterFactory.CreateJsonWriter(new MemoryStream(), Encoding.UTF8))
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                .SetOptions(XmlWriterOptions.OutputJsonTypes)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                .WriteMessage(sampleMessage)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    );
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    RunBenchmark("Serialize to dictionary", sampleMessage.SerializedSize, () => new DictionaryWriter().WriteMessage(sampleMessage));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //Deserializers
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (!FastTest) RunBenchmark("Deserialize from byte string", inputData.Length,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                           () => defaultMessage.WeakCreateBuilderForType()
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -189,14 +196,16 @@ namespace Google.ProtocolBuffers.ProtoBench 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                           .WeakBuild();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   });
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                RunBenchmark("Deserialize from xml", xmlBytes.Length, () => XmlFormatReader.CreateInstance(xmlBytes).Merge(defaultMessage.WeakCreateBuilderForType()).WeakBuild());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                RunBenchmark("Deserialize from json", jsonBytes.Length, () => JsonFormatReader.CreateInstance(jsonBytes).Merge(defaultMessage.WeakCreateBuilderForType()).WeakBuild());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                RunBenchmark("Deserialize from json via xml", jsonBytes.Length,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    () => XmlFormatReader.CreateInstance(JsonReaderWriterFactory.CreateJsonReader(jsonBytes, System.Xml.XmlDictionaryReaderQuotas.Max))
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        .SetOptions(XmlReaderOptions.ReadNestedArrays).Merge(defaultMessage.WeakCreateBuilderForType()).WeakBuild());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                RunBenchmark("Deserialize from dictionary", sampleMessage.SerializedSize, () => new DictionaryReader(dictionary).Merge(defaultMessage.WeakCreateBuilderForType()).WeakBuild());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (OtherFormats)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    RunBenchmark("Deserialize from xml", xmlBytes.Length, () => XmlFormatReader.CreateInstance(xmlBytes).Merge(defaultMessage.WeakCreateBuilderForType()).WeakBuild());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    RunBenchmark("Deserialize from json", jsonBytes.Length, () => JsonFormatReader.CreateInstance(jsonBytes).Merge(defaultMessage.WeakCreateBuilderForType()).WeakBuild());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    RunBenchmark("Deserialize from json via xml", jsonBytes.Length,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        () => XmlFormatReader.CreateInstance(JsonReaderWriterFactory.CreateJsonReader(jsonBytes, System.Xml.XmlDictionaryReaderQuotas.Max))
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .SetOptions(XmlReaderOptions.ReadNestedArrays).Merge(defaultMessage.WeakCreateBuilderForType()).WeakBuild());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    RunBenchmark("Deserialize from dictionary", sampleMessage.SerializedSize, () => new DictionaryReader(dictionary).Merge(defaultMessage.WeakCreateBuilderForType()).WeakBuild());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Console.WriteLine();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 return true;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }
 
			 |