diff --git a/src/Build/Collections/MultiDictionary.cs b/src/Build/Collections/MultiDictionary.cs index ef8c02c8c8e..388ac065b47 100644 --- a/src/Build/Collections/MultiDictionary.cs +++ b/src/Build/Collections/MultiDictionary.cs @@ -68,6 +68,15 @@ internal MultiDictionary(IEqualityComparer keyComparer) _backing = new Dictionary>(keyComparer); } + /// + /// Constructor taking a specified comparer and initial capacity for the keys. + /// Pre-sizing avoids repeated dictionary resizes when the number of keys is known. + /// + internal MultiDictionary(int capacity, IEqualityComparer keyComparer) + { + _backing = new Dictionary>(capacity, keyComparer); + } + /// /// Number of keys /// diff --git a/src/Build/Instance/ProjectInstance.cs b/src/Build/Instance/ProjectInstance.cs index 662fe6ff516..b7dea631294 100644 --- a/src/Build/Instance/ProjectInstance.cs +++ b/src/Build/Instance/ProjectInstance.cs @@ -3398,7 +3398,7 @@ private void CreateEvaluatedIncludeSnapshotIfRequested(bool keepEvaluationCache, return; } - var multiDictionary = new MultiDictionary(StringComparer.OrdinalIgnoreCase); + var multiDictionary = new MultiDictionary(items.Count, StringComparer.OrdinalIgnoreCase); foreach (var item in items) { multiDictionary.Add(item.EvaluatedInclude, projectItemToInstanceMap[item]);