Skip to content

Commit dd59341

Browse files
authored
Remove delegate/closure allocations from DynamicAssemblies.IsTypeDynamic (#66797)
1 parent c7edb61 commit dd59341

File tree

4 files changed

+6
-6
lines changed

4 files changed

+6
-6
lines changed

src/libraries/System.Private.Xml/src/System/Xml/Serialization/ContextAwareTables.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public ContextAwareTables()
2020
_collectibleTable = new ConditionalWeakTable<Type, T>();
2121
}
2222

23-
internal T GetOrCreateValue(Type t, Func<T> f)
23+
internal T GetOrCreateValue(Type t, Func<Type, T> f)
2424
{
2525
// The fast and most common default case
2626
T? ret = (T?)_defaultTable[t];
@@ -41,7 +41,7 @@ internal T GetOrCreateValue(Type t, Func<T> f)
4141
{
4242
if ((ret = (T?)_defaultTable[t]) == null)
4343
{
44-
ret = f();
44+
ret = f(t);
4545
_defaultTable[t] = ret;
4646
}
4747
}
@@ -54,7 +54,7 @@ internal T GetOrCreateValue(Type t, Func<T> f)
5454
{
5555
if (!_collectibleTable.TryGetValue(t, out ret))
5656
{
57-
ret = f();
57+
ret = f(t);
5858
_collectibleTable.AddOrUpdate(t, ret);
5959
}
6060
}

src/libraries/System.Private.Xml/src/System/Xml/Serialization/ReflectionXmlSerializationReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,7 @@ private static ReflectionXmlSerializationReaderHelper.SetMemberValueDelegate Get
639639
Debug.Assert(o != null, "Object o should not be null");
640640
Debug.Assert(!string.IsNullOrEmpty(memberName), "memberName must have a value");
641641
Type type = o.GetType();
642-
var delegateCacheForType = s_setMemberValueDelegateCache.GetOrCreateValue(type, () => new Hashtable());
642+
var delegateCacheForType = s_setMemberValueDelegateCache.GetOrCreateValue(type, _ => new Hashtable());
643643
var result = delegateCacheForType[memberName];
644644
if (result == null)
645645
{

src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializationWriter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1466,7 +1466,7 @@ internal static class DynamicAssemblies
14661466
// It's OK to suppress the SxS warning.
14671467
internal static bool IsTypeDynamic(Type type)
14681468
{
1469-
object oIsTypeDynamic = s_tableIsTypeDynamic.GetOrCreateValue(type, () =>
1469+
object oIsTypeDynamic = s_tableIsTypeDynamic.GetOrCreateValue(type, static type =>
14701470
{
14711471
Assembly assembly = type.Assembly;
14721472
bool isTypeDynamic = assembly.IsDynamic /*|| string.IsNullOrEmpty(assembly.Location)*/;

src/libraries/System.Private.Xml/src/System/Xml/Serialization/XmlSerializer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,7 @@ private static XmlSerializer[] GetSerializersFromCache(XmlMapping[] mappings, Ty
685685
Dictionary<XmlSerializerMappingKey, XmlSerializer>? typedMappingTable = null;
686686
AssemblyLoadContext? alc = AssemblyLoadContext.GetLoadContext(type.Assembly);
687687

688-
typedMappingTable = s_xmlSerializerTable.GetOrCreateValue(type, () => new Dictionary<XmlSerializerMappingKey, XmlSerializer>());
688+
typedMappingTable = s_xmlSerializerTable.GetOrCreateValue(type, _ => new Dictionary<XmlSerializerMappingKey, XmlSerializer>());
689689

690690
lock (typedMappingTable)
691691
{

0 commit comments

Comments
 (0)