From b9b3cf78c9277a849640e8f8371612bf37cdb597 Mon Sep 17 00:00:00 2001 From: Naresh Joshi Date: Mon, 5 Jan 2026 12:25:38 -0800 Subject: [PATCH 1/2] Reduce allocations in ProjectItemInstance.CommonConstructor by setting right capacity for list --- src/Build/Instance/ProjectItemInstance.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Build/Instance/ProjectItemInstance.cs b/src/Build/Instance/ProjectItemInstance.cs index 696f135412f..064a7864c3a 100644 --- a/src/Build/Instance/ProjectItemInstance.cs +++ b/src/Build/Instance/ProjectItemInstance.cs @@ -743,7 +743,16 @@ private void CommonConstructor( if (itemDefinitions == null || !useItemDefinitionsWithoutModification) { // TaskItems don't have an item type. So for their benefit, we have to lookup and add the regular item definition. - inheritedItemDefinitions = (itemDefinitions == null) ? null : new List(itemDefinitions); + if (itemDefinitions == null) + { + inheritedItemDefinitions = null; + } + else + { + List list = new List(itemDefinitions.Count + 1); // account for possible addition below to avoid resizing + list.AddRange(itemDefinitions); + inheritedItemDefinitions = list; + } ProjectItemDefinitionInstance itemDefinition; if (projectToUse.ItemDefinitions.TryGetValue(itemTypeToUse, out itemDefinition)) From 71cd9b41654e87e4499edfd1d799a9e6d9f41dfc Mon Sep 17 00:00:00 2001 From: Naresh Joshi Date: Tue, 20 Jan 2026 16:40:49 -0800 Subject: [PATCH 2/2] Address PR feedback to avoid list variable --- src/Build/Instance/ProjectItemInstance.cs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/Build/Instance/ProjectItemInstance.cs b/src/Build/Instance/ProjectItemInstance.cs index 064a7864c3a..c4d53fbf0ae 100644 --- a/src/Build/Instance/ProjectItemInstance.cs +++ b/src/Build/Instance/ProjectItemInstance.cs @@ -743,16 +743,8 @@ private void CommonConstructor( if (itemDefinitions == null || !useItemDefinitionsWithoutModification) { // TaskItems don't have an item type. So for their benefit, we have to lookup and add the regular item definition. - if (itemDefinitions == null) - { - inheritedItemDefinitions = null; - } - else - { - List list = new List(itemDefinitions.Count + 1); // account for possible addition below to avoid resizing - list.AddRange(itemDefinitions); - inheritedItemDefinitions = list; - } + inheritedItemDefinitions = (itemDefinitions == null) ? null : new List(itemDefinitions.Count + 1); + ((List)inheritedItemDefinitions)?.AddRange(itemDefinitions); ProjectItemDefinitionInstance itemDefinition; if (projectToUse.ItemDefinitions.TryGetValue(itemTypeToUse, out itemDefinition))