diff options
author | Jan Tattermusch <jtattermusch@google.com> | 2015-05-07 08:40:36 -0700 |
---|---|---|
committer | Jan Tattermusch <jtattermusch@google.com> | 2015-05-07 08:40:36 -0700 |
commit | 6f9da37b0dfa586b3167a9aa2f276059664953e8 (patch) | |
tree | 696087d517c5a69c72b77b561ec306da056c0f68 /csharp/src/ProtocolBuffers | |
parent | e0afc0028f88c2e1e8ac5a053717cd3e0c8cc9cb (diff) | |
download | protobuf-6f9da37b0dfa586b3167a9aa2f276059664953e8.tar.gz protobuf-6f9da37b0dfa586b3167a9aa2f276059664953e8.tar.bz2 protobuf-6f9da37b0dfa586b3167a9aa2f276059664953e8.zip |
Performance optimization for small messages without unknown fields
Diffstat (limited to 'csharp/src/ProtocolBuffers')
-rw-r--r-- | csharp/src/ProtocolBuffers/UnknownFieldSet.cs | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/csharp/src/ProtocolBuffers/UnknownFieldSet.cs b/csharp/src/ProtocolBuffers/UnknownFieldSet.cs index 98aa04c7..d5d0675d 100644 --- a/csharp/src/ProtocolBuffers/UnknownFieldSet.cs +++ b/csharp/src/ProtocolBuffers/UnknownFieldSet.cs @@ -125,9 +125,13 @@ namespace Google.ProtocolBuffers /// </summary>
public void WriteTo(ICodedOutputStream output)
{
- foreach (KeyValuePair<int, UnknownField> entry in fields)
+ // Avoid creating enumerator for the most common code path.
+ if (fields.Count > 0)
{
- entry.Value.WriteTo(entry.Key, output);
+ foreach (KeyValuePair<int, UnknownField> entry in fields)
+ {
+ entry.Value.WriteTo(entry.Key, output);
+ }
}
}
@@ -138,6 +142,12 @@ namespace Google.ProtocolBuffers {
get
{
+ // Avoid creating enumerator for the most common code path.
+ if (fields.Count == 0)
+ {
+ return 0;
+ }
+
int result = 0;
foreach (KeyValuePair<int, UnknownField> entry in fields)
{
@@ -209,9 +219,13 @@ namespace Google.ProtocolBuffers /// </summary>
public void WriteAsMessageSetTo(ICodedOutputStream output)
{
- foreach (KeyValuePair<int, UnknownField> entry in fields)
+ // Avoid creating enumerator for the most common code path.
+ if (fields.Count > 0)
{
- entry.Value.WriteAsMessageSetExtensionTo(entry.Key, output);
+ foreach (KeyValuePair<int, UnknownField> entry in fields)
+ {
+ entry.Value.WriteAsMessageSetExtensionTo(entry.Key, output);
+ }
}
}
@@ -223,6 +237,12 @@ namespace Google.ProtocolBuffers {
get
{
+ // Avoid creating enumerator for the most common code path.
+ if (fields.Count == 0)
+ {
+ return 0;
+ }
+
int result = 0;
foreach (KeyValuePair<int, UnknownField> entry in fields)
{
|