From 9b66768e257dd8e61895d8a2c40f078f9987b577 Mon Sep 17 00:00:00 2001 From: Jon Skeet Date: Fri, 12 Jun 2015 11:19:16 +0100 Subject: Optimization to avoid foreach over empty lists. --- csharp/src/ProtocolBuffers/CodedOutputStream.cs | 73 ++++++++++++++++++++++--- 1 file changed, 64 insertions(+), 9 deletions(-) (limited to 'csharp/src/ProtocolBuffers') diff --git a/csharp/src/ProtocolBuffers/CodedOutputStream.cs b/csharp/src/ProtocolBuffers/CodedOutputStream.cs index 132f8067..dfcaf8a2 100644 --- a/csharp/src/ProtocolBuffers/CodedOutputStream.cs +++ b/csharp/src/ProtocolBuffers/CodedOutputStream.cs @@ -543,19 +543,14 @@ namespace Google.Protobuf #endregion #region Write array members - public void WriteGroupArray(int fieldNumber, RepeatedField list) + public void WriteMessageArray(int fieldNumber, RepeatedField list) where T : IMessage { - foreach (IMessage value in list) + if (list.Count == 0) { - WriteGroup(fieldNumber, value); + return; } - } - - public void WriteMessageArray(int fieldNumber, RepeatedField list) - where T : IMessage - { - foreach (IMessage value in list) + foreach (T value in list) { WriteMessage(fieldNumber, value); } @@ -563,6 +558,10 @@ namespace Google.Protobuf public void WriteStringArray(int fieldNumber, RepeatedField list) { + if (list.Count == 0) + { + return; + } foreach (var value in list) { WriteString(fieldNumber, value); @@ -571,6 +570,10 @@ namespace Google.Protobuf public void WriteBytesArray(int fieldNumber, RepeatedField list) { + if (list.Count == 0) + { + return; + } foreach (var value in list) { WriteBytes(fieldNumber, value); @@ -579,6 +582,10 @@ namespace Google.Protobuf public void WriteBoolArray(int fieldNumber, RepeatedField list) { + if (list.Count == 0) + { + return; + } foreach (var value in list) { WriteBool(fieldNumber, value); @@ -587,6 +594,10 @@ namespace Google.Protobuf public void WriteInt32Array(int fieldNumber, RepeatedField list) { + if (list.Count == 0) + { + return; + } foreach (var value in list) { WriteInt32(fieldNumber, value); @@ -595,6 +606,10 @@ namespace Google.Protobuf public void WriteSInt32Array(int fieldNumber, RepeatedField list) { + if (list.Count == 0) + { + return; + } foreach (var value in list) { WriteSInt32(fieldNumber, value); @@ -603,6 +618,10 @@ namespace Google.Protobuf public void WriteUInt32Array(int fieldNumber, RepeatedField list) { + if (list.Count == 0) + { + return; + } foreach (var value in list) { WriteUInt32(fieldNumber, value); @@ -611,6 +630,10 @@ namespace Google.Protobuf public void WriteFixed32Array(int fieldNumber, RepeatedField list) { + if (list.Count == 0) + { + return; + } foreach (var value in list) { WriteFixed32(fieldNumber, value); @@ -619,6 +642,10 @@ namespace Google.Protobuf public void WriteSFixed32Array(int fieldNumber, RepeatedField list) { + if (list.Count == 0) + { + return; + } foreach (var value in list) { WriteSFixed32(fieldNumber, value); @@ -627,6 +654,10 @@ namespace Google.Protobuf public void WriteInt64Array(int fieldNumber, RepeatedField list) { + if (list.Count == 0) + { + return; + } foreach (var value in list) { WriteInt64(fieldNumber, value); @@ -635,6 +666,10 @@ namespace Google.Protobuf public void WriteSInt64Array(int fieldNumber, RepeatedField list) { + if (list.Count == 0) + { + return; + } foreach (var value in list) { WriteSInt64(fieldNumber, value); @@ -643,6 +678,10 @@ namespace Google.Protobuf public void WriteUInt64Array(int fieldNumber, RepeatedField list) { + if (list.Count == 0) + { + return; + } foreach (var value in list) { WriteUInt64(fieldNumber, value); @@ -651,6 +690,10 @@ namespace Google.Protobuf public void WriteFixed64Array(int fieldNumber, RepeatedField list) { + if (list.Count == 0) + { + return; + } foreach (var value in list) { WriteFixed64(fieldNumber, value); @@ -659,6 +702,10 @@ namespace Google.Protobuf public void WriteSFixed64Array(int fieldNumber, RepeatedField list) { + if (list.Count == 0) + { + return; + } foreach (var value in list) { WriteSFixed64(fieldNumber, value); @@ -667,6 +714,10 @@ namespace Google.Protobuf public void WriteDoubleArray(int fieldNumber, RepeatedField list) { + if (list.Count == 0) + { + return; + } foreach (var value in list) { WriteDouble(fieldNumber, value); @@ -675,6 +726,10 @@ namespace Google.Protobuf public void WriteFloatArray(int fieldNumber, RepeatedField list) { + if (list.Count == 0) + { + return; + } foreach (var value in list) { WriteFloat(fieldNumber, value); -- cgit v1.2.3