MSDN官方XmlSerializer类导致内存泄漏和性能低
2024-10-19 06:19:58
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.
}
最新文章
- 隐私泄露杀手锏 —— Flash 权限反射
- maven中classpath路径(转)
- 【Python实战】Django建站笔记
- Mysql的视图、存储过程、函数、索引全解析
- autofac 使用
- 如何重置CentOS 7的Root密码?设置CentOS 7的Root密码的方法与步骤
- An Introduction to Garbage Collection(垃圾回收简介)
- 写了个pager, 可供参考
- 关于JSP的C标签之forEach循环分隔符
- Android Environment FAQ (Frequently Asked Question)
- ThreadLocal的几种误区
- 影响pogo pin连接器使用寿命的因素
- ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值
- text-overflow:ellipsis 的应用(转载)
- Java获取Object属性值
- Java Socket输入流如何检测到EOF
- Excel Foundation Install
- 爬虫-----selenium模块自动爬取网页资源
- CV迅速发展
- 音视频编解码: YUV存储格式中的YUV420P,YUV420SP,NV12, NV21理解(转)