diff options
author | Jb Evain <jb@evain.net> | 2017-02-13 22:37:11 +0300 |
---|---|---|
committer | Jb Evain <jb@evain.net> | 2017-02-13 22:37:11 +0300 |
commit | 5088870debfaaec5b4cc4b68ede1d10eba8b128c (patch) | |
tree | 6ea13efc63036f847ee8d7ca6ad490d09152f248 | |
parent | a4a5fea3fe7d5c7e1010a00358937badbcdbd9db (diff) |
Avoid list resizes
-rw-r--r-- | Mono.Cecil.Metadata/Buffers.cs | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/Mono.Cecil.Metadata/Buffers.cs b/Mono.Cecil.Metadata/Buffers.cs index 9bb2f94..d219546 100644 --- a/Mono.Cecil.Metadata/Buffers.cs +++ b/Mono.Cecil.Metadata/Buffers.cs @@ -326,8 +326,7 @@ namespace Mono.Cecil.Metadata { public uint [] WriteStrings () { - var sorted = new List<KeyValuePair<string, uint>> (strings); - sorted.Sort (new SuffixSort ()); + var sorted = SortStrings (strings); strings = null; // Add 1 for empty string whose index and offset are both 0 @@ -355,6 +354,16 @@ namespace Mono.Cecil.Metadata { return string_offsets; } + static List<KeyValuePair<string, uint>> SortStrings (Dictionary<string, uint> strings) + { + var sorted = new List<KeyValuePair<string, uint>> (strings.Count); + foreach (var pair in strings) + sorted.Add (pair); + + sorted.Sort (new SuffixSort ()); + return sorted; + } + static bool IsLowSurrogateChar (int c) { return unchecked((uint)(c - 0xDC00)) <= 0xDFFF - 0xDC00; |