public System.Xml.Serialization.XmlSerializer GetSerializer(Type type
, XmlAttributeOverrides overrides
, Type[] types
, XmlRootAttribute root
, String defaultNamespace)
{
string key = CacheKeyFactory.MakeKey(type
, overrides
, types
, root
, defaultNamespace);
System.Xml.Serialization.XmlSerializer serializer = null;
var isCacheHit = false;
if (!Serializers.TryGetValue(key, out serializer))
{
lock (SyncRoot)
{
if (!Serializers.TryGetValue(key, out serializer))
{
serializer = new System.Xml.Serialization.XmlSerializer(type
, overrides
, types
, root
, defaultNamespace);
Serializers.Add(key, serializer);
if (null != NewSerializer)
{
NewSerializer(type
, overrides
, types
, root
, defaultNamespace);
}
}
else
{
isCacheHit = true;
}
}
}
else
{
isCacheHit = true;
}
if (isCacheHit && CacheHit != null)
{
// Tell the listeners that we already
// had a serializer that matched the attributes
CacheHit(type
, overrides
, types
, root
, defaultNamespace);
}
System.Diagnostics.Debug.Assert(null != serializer);
return serializer;
}
Comments: ** Comment from web user: taliesins **
, XmlAttributeOverrides overrides
, Type[] types
, XmlRootAttribute root
, String defaultNamespace)
{
string key = CacheKeyFactory.MakeKey(type
, overrides
, types
, root
, defaultNamespace);
System.Xml.Serialization.XmlSerializer serializer = null;
var isCacheHit = false;
if (!Serializers.TryGetValue(key, out serializer))
{
lock (SyncRoot)
{
if (!Serializers.TryGetValue(key, out serializer))
{
serializer = new System.Xml.Serialization.XmlSerializer(type
, overrides
, types
, root
, defaultNamespace);
Serializers.Add(key, serializer);
if (null != NewSerializer)
{
NewSerializer(type
, overrides
, types
, root
, defaultNamespace);
}
}
else
{
isCacheHit = true;
}
}
}
else
{
isCacheHit = true;
}
if (isCacheHit && CacheHit != null)
{
// Tell the listeners that we already
// had a serializer that matched the attributes
CacheHit(type
, overrides
, types
, root
, defaultNamespace);
}
System.Diagnostics.Debug.Assert(null != serializer);
return serializer;
}
Comments: ** Comment from web user: taliesins **
This same approach could be used to fix GetCompiledExpression thread safety problem.