zoukankan      html  css  js  c++  java
  • XmlSerializer类导致内存泄漏和性能低

    微信云上管车,接入微信开放平台的通讯录,审批流等接口,微信回调我们的接口,数据类型为xml格式,我们接口需要处理数据时用到XmlSerializer

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

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

    public static ConcurrentDictionary<Type, XmlSerializer> serializerMap = new ConcurrentDictionary<Type, XmlSerializer>();public static T GetInfoFromXML(string data)
    {
    T objectInfo = default(T);

    	LogWriter.ToTrace("反序列化XML:" + data);
    	if (string.IsNullOrEmpty(data))
    	{
    		return objectInfo;
    	}
    	var dicKey = typeof(T);
    	serializerMap.TryGetValue(dicKey, out var serializer);
    	if (serializer==null)
    	{
    		serializer= new XmlSerializer(dicKey, new XmlRootAttribute("xml"));
    		serializerMap.TryAdd(dicKey, serializer);
    	}
    	
    	using (TextReader txtReader = new StringReader(data))
    	{
    		objectInfo = (T)serializer.Deserialize(txtReader);
    	}
    	return objectInfo;
    }
    

    }

  • 相关阅读:
    [BZOJ1565][NOI2009]植物大战僵尸
    [BZOJ1566][NOI2009]管道取珠
    [BZOJ4104][Thu Summer Camp 2015]解密运算
    [BZOJ1003][ZJOI2006]物流运输
    [BZOJ3790]神奇项链
    指纹模块原理_光学指纹模块原理
    Ubuntu 16.04无损分区大小调整工具Gparted
    16进制转换10进制
    Memory Ordering in Modern Microprocessors
    python 多态
  • 原文地址:https://www.cnblogs.com/liuqiyun/p/14944156.html
Copyright © 2011-2022 走看看