From 108c23fb58144fb37ca42c115e99aed0b5d7e903 Mon Sep 17 00:00:00 2001 From: ds5678 <49847914+ds5678@users.noreply.github.com> Date: Thu, 7 May 2026 22:37:37 -0700 Subject: [PATCH] Improve performance of converting contexts to AsmResolver types The opportunities were discovered via performance profiling of Il2CppInterop. --- Cpp2IL.Core/Utils/AsmResolver/ContextToMethodDescriptor.cs | 2 +- Cpp2IL.Core/Utils/AsmResolver/ContextToTypeSignature.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cpp2IL.Core/Utils/AsmResolver/ContextToMethodDescriptor.cs b/Cpp2IL.Core/Utils/AsmResolver/ContextToMethodDescriptor.cs index de9fee601..94decb56a 100644 --- a/Cpp2IL.Core/Utils/AsmResolver/ContextToMethodDescriptor.cs +++ b/Cpp2IL.Core/Utils/AsmResolver/ContextToMethodDescriptor.cs @@ -43,7 +43,7 @@ public static IMethodDescriptor ToMethodDescriptor(this ConcreteGenericMethodAna } else { - var typeSignatures = methodGenericParameters.Select(p => p.ToTypeSignature(parentModule)).ToArray(); + var typeSignatures = methodGenericParameters.Select(p => p.ToTypeSignature(parentModule)); return parentModule.DefaultImporter.ImportMethod(memberReference.MakeGenericInstanceMethod(typeSignatures)); } } diff --git a/Cpp2IL.Core/Utils/AsmResolver/ContextToTypeSignature.cs b/Cpp2IL.Core/Utils/AsmResolver/ContextToTypeSignature.cs index 9a2127eda..467da8f13 100644 --- a/Cpp2IL.Core/Utils/AsmResolver/ContextToTypeSignature.cs +++ b/Cpp2IL.Core/Utils/AsmResolver/ContextToTypeSignature.cs @@ -17,7 +17,7 @@ private static TypeDefinition GetTypeDefinition(this TypeAnalysisContext context public static TypeSignature ToTypeSignature(this TypeAnalysisContext context, ModuleDefinition parentModule) => context switch { ReferencedTypeAnalysisContext referencedTypeAnalysisContext => referencedTypeAnalysisContext.ToTypeSignature(parentModule), - _ => parentModule.DefaultImporter.ImportType(context.GetTypeDefinition()).ToTypeSignature(parentModule.RuntimeContext) + _ => parentModule.DefaultImporter.ImportType(context.GetTypeDefinition()).ToTypeSignature(context.IsValueType) }; public static TypeSignature ToTypeSignature(this ReferencedTypeAnalysisContext context, ModuleDefinition parentModule) => context switch @@ -32,7 +32,7 @@ private static TypeDefinition GetTypeDefinition(this TypeAnalysisContext context public static GenericInstanceTypeSignature ToTypeSignature(this GenericInstanceTypeAnalysisContext context, ModuleDefinition parentModule) { var genericType = context.GenericType.ToTypeSignature(parentModule).ToTypeDefOrRef(); - var genericArguments = context.GenericArguments.Select(a => a.ToTypeSignature(parentModule)).ToArray(); + var genericArguments = context.GenericArguments.Select(a => a.ToTypeSignature(parentModule)); return new GenericInstanceTypeSignature(genericType, context.IsValueType, genericArguments); }