未验证 提交 dd593413 编写于 作者: S Stephen Toub 提交者: GitHub

Remove delegate/closure allocations from DynamicAssemblies.IsTypeDynamic (#66797)

上级 c7edb61f
......@@ -20,7 +20,7 @@ public ContextAwareTables()
_collectibleTable = new ConditionalWeakTable<Type, T>();
}
internal T GetOrCreateValue(Type t, Func<T> f)
internal T GetOrCreateValue(Type t, Func<Type, T> f)
{
// The fast and most common default case
T? ret = (T?)_defaultTable[t];
......@@ -41,7 +41,7 @@ internal T GetOrCreateValue(Type t, Func<T> f)
{
if ((ret = (T?)_defaultTable[t]) == null)
{
ret = f();
ret = f(t);
_defaultTable[t] = ret;
}
}
......@@ -54,7 +54,7 @@ internal T GetOrCreateValue(Type t, Func<T> f)
{
if (!_collectibleTable.TryGetValue(t, out ret))
{
ret = f();
ret = f(t);
_collectibleTable.AddOrUpdate(t, ret);
}
}
......
......@@ -639,7 +639,7 @@ private static ReflectionXmlSerializationReaderHelper.SetMemberValueDelegate Get
Debug.Assert(o != null, "Object o should not be null");
Debug.Assert(!string.IsNullOrEmpty(memberName), "memberName must have a value");
Type type = o.GetType();
var delegateCacheForType = s_setMemberValueDelegateCache.GetOrCreateValue(type, () => new Hashtable());
var delegateCacheForType = s_setMemberValueDelegateCache.GetOrCreateValue(type, _ => new Hashtable());
var result = delegateCacheForType[memberName];
if (result == null)
{
......
......@@ -1466,7 +1466,7 @@ internal static class DynamicAssemblies
// It's OK to suppress the SxS warning.
internal static bool IsTypeDynamic(Type type)
{
object oIsTypeDynamic = s_tableIsTypeDynamic.GetOrCreateValue(type, () =>
object oIsTypeDynamic = s_tableIsTypeDynamic.GetOrCreateValue(type, static type =>
{
Assembly assembly = type.Assembly;
bool isTypeDynamic = assembly.IsDynamic /*|| string.IsNullOrEmpty(assembly.Location)*/;
......
......@@ -685,7 +685,7 @@ private static XmlSerializer[] GetSerializersFromCache(XmlMapping[] mappings, Ty
Dictionary<XmlSerializerMappingKey, XmlSerializer>? typedMappingTable = null;
AssemblyLoadContext? alc = AssemblyLoadContext.GetLoadContext(type.Assembly);
typedMappingTable = s_xmlSerializerTable.GetOrCreateValue(type, () => new Dictionary<XmlSerializerMappingKey, XmlSerializer>());
typedMappingTable = s_xmlSerializerTable.GetOrCreateValue(type, _ => new Dictionary<XmlSerializerMappingKey, XmlSerializer>());
lock (typedMappingTable)
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册