internal static TraceLoggingTypeInfo <DataType> GetInstance(List <Type> recursionCheck) { if (TraceLoggingTypeInfo <DataType> .instance == null) { int count = recursionCheck.Count; TraceLoggingTypeInfo <DataType> defaultTypeInfo = Statics.CreateDefaultTypeInfo <DataType>(recursionCheck); Interlocked.CompareExchange <TraceLoggingTypeInfo <DataType> >(ref TraceLoggingTypeInfo <DataType> .instance, defaultTypeInfo, (TraceLoggingTypeInfo <DataType>)null); recursionCheck.RemoveRange(count, recursionCheck.Count - count); } return(TraceLoggingTypeInfo <DataType> .instance); }
public static TraceLoggingTypeInfo GetInstance(Type type, List <Type>?recursionCheck) { Dictionary <Type, TraceLoggingTypeInfo> cache = threadCache ??= new Dictionary <Type, TraceLoggingTypeInfo>(); if (!cache.TryGetValue(type, out TraceLoggingTypeInfo? instance)) { recursionCheck ??= new List <Type>(); int recursionCheckCount = recursionCheck.Count; instance = Statics.CreateDefaultTypeInfo(type, recursionCheck); cache[type] = instance; recursionCheck.RemoveRange(recursionCheckCount, recursionCheck.Count - recursionCheckCount); } return(instance); }