* Fix for dotnet/coreclr#21456 - restrict increased generic attribute allocations to only generic attributes
This is a trivial quick-fix for dotnet/coreclr#21456 where regressions between 2.1 and 3.0 were discovered on most attibute pathways due to the allocation overhead in the generic-supporting pathways. The workaround is to simply not take that slow/expensive path for non-generics.
While I'd like to optimize `RuntimeModule.ResolveMethod` further, there's a public surface area in play there that makes the changes non-trivial. There, we'll have to choose overhead on the public path (which may still be a net win), or duplication in code for another path.
* Update comments
Commit migrated from https://github.com/dotnet/coreclr/commit/
130cec3b15815ae023a7aac9dc96aa97b36117a0
if (ctorHasParameters)
{
// Resolve method ctor token found in decorated decoratedModule scope
- ctor = decoratedModule.ResolveMethod(caRecord.tkCtor, attributeType.GenericTypeArguments, null).MethodHandle.GetMethodInfo();
+ // See https://github.com/dotnet/coreclr/issues/21456 for why we fast-path non-generics here (fewer allocations)
+ if (attributeType.IsGenericType)
+ {
+ ctor = decoratedModule.ResolveMethod(caRecord.tkCtor, attributeType.GenericTypeArguments, null).MethodHandle.GetMethodInfo();
+ }
+ else
+ {
+ ctor = ModuleHandle.ResolveMethodHandleInternal(decoratedModule.GetNativeHandle(), caRecord.tkCtor);
+ }
}
else
{