From e8149d8a387b70710ccec9cfa28da2f45a72d02c Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Thu, 16 Apr 2026 10:03:01 -0500 Subject: [PATCH 1/2] =?UTF-8?q?Use=20List=20to=20avoid=20O(n?= =?UTF-8?q?=C2=B2)=20array=20growth=20in=20GenerateTypeMappings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace Concat().ToArray() per-arch iteration with a backing List field that uses AddRange(), converting to array once at the end of RunTask(). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Xamarin.Android.Build.Tasks/Tasks/GenerateTypeMappings.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateTypeMappings.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateTypeMappings.cs index 70a6a60f5a9..9c4f7bd01b8 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateTypeMappings.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateTypeMappings.cs @@ -50,6 +50,7 @@ public class GenerateTypeMappings : AndroidTask public string TypemapOutputDirectory { get; set; } = ""; AndroidRuntime androidRuntime; + readonly List generatedBinaryTypeMaps = new List (); public override bool RunTask () { @@ -71,6 +72,7 @@ public override bool RunTask () if (RunCheckedBuild || useMarshalMethods) GenerateAllTypeMappingsFromNativeState (useMarshalMethods); + GeneratedBinaryTypeMaps = generatedBinaryTypeMaps.ToArray (); return !Log.HasLoggedErrors; } @@ -164,6 +166,6 @@ void AddOutputTypeMaps (TypeMapGenerator tmg, AndroidTargetArch arch) items.Add (item); } - GeneratedBinaryTypeMaps = GeneratedBinaryTypeMaps.Concat (items).ToArray (); + generatedBinaryTypeMaps.AddRange (items); } } From 1195bcb2b46bb9b17144070e6308a0f22308ee33 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Thu, 16 Apr 2026 10:16:29 -0500 Subject: [PATCH 2/2] Remove intermediate List in AddOutputTypeMaps Add items directly to the backing List field instead of building a local list and calling AddRange(). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../Tasks/GenerateTypeMappings.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateTypeMappings.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateTypeMappings.cs index 9c4f7bd01b8..eb9e89bfe87 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateTypeMappings.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateTypeMappings.cs @@ -155,7 +155,6 @@ void GenerateTypeMapFromNativeState (NativeCodeGenState state, bool useMarshalMe void AddOutputTypeMaps (TypeMapGenerator tmg, AndroidTargetArch arch) { string abi = MonoAndroidHelper.ArchToAbi (arch); - var items = new List (); foreach (string file in tmg.GeneratedBinaryTypeMaps) { var item = new TaskItem (file); @@ -163,9 +162,7 @@ void AddOutputTypeMaps (TypeMapGenerator tmg, AndroidTargetArch arch) item.SetMetadata ("DestinationSubPath", $"{abi}/{fileName}"); item.SetMetadata ("DestinationSubDirectory", $"{abi}/"); item.SetMetadata ("Abi", abi); - items.Add (item); + generatedBinaryTypeMaps.Add (item); } - - generatedBinaryTypeMaps.AddRange (items); } }