MSDN官方XmlSerializer类导致内存泄漏和性能低

MSDN官方XmlSerializer类使用说明链接:
http://msdn.microsoft.com/zh-CN/library/system.xml.serialization.xmlserializer(v=VS.100).aspx

动态生成的程序集

为了提高性能,XML 序列化基础结构动态生成程序集,以便对指定类型进行序列化和反序列化。 该基础结构将找到并重新使用这些程序集。 仅当使用以下构造函数时,才会发生此行为:

XmlSerializer.XmlSerializer(Type)

XmlSerializer.XmlSerializer(Type, String)

如果使用任何其他构造函数,则将生成同一个程序集的多个版本,这些版本始终不予卸载,从而导致内存泄漏和性能低下。 最简单的解决方案是使用前面提到的两个构造函数中的一个。 否则,必须在 Hashtable 中缓存程序集,如下面的示例所示。

 
Hashtable serializers = new Hashtable();



// Use the constructor that takes a type and XmlRootAttribute.

XmlSerializer s = new XmlSerializer(typeof(MyClass), myRoot);



// Implement a method named GenerateKey that creates unique keys 

// for each instance of the XmlSerializer. The code should take 

// into account all parameters passed to the XmlSerializer 

// constructor.

object key = GenerateKey(typeof(MyClass), myRoot);



// Check the local cache for a matching serializer.

XmlSerializer ser = (XmlSerializer)serializers[key];

if (ser == null) 

{

    ser = new XmlSerializer(typeof(MyClass), myRoot);

    // Cache the serializer.

    serializers[key] = ser;

}

else

{

    // Use the serializer to serialize, or deserialize.

}


你可能感兴趣的:(Serialize)