加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

缓存 – 缓存DataContractSerializer实例是一个好主意吗?

发布时间:2020-12-13 22:30:41 所属栏目:Windows 来源:网络整理
导读:我正在编写一个 Windows服务应用程序,需要在执行期间反复序列化和反序列化XML文档.因为我需要序列化和反序列化在编译期间未知的泛型类型(我不知道我需要序列化/反序列化需要多少类型)我想知道保留缓存是否是个好主意我实例化的DataContractSerializer对象用
我正在编写一个 Windows服务应用程序,需要在执行期间反复序列化和反序列化XML文档.因为我需要序列化和反序列化在编译期间未知的泛型类型(我不知道我需要序列化/反序列化需要多少类型)我想知道保留缓存是否是个好主意我实例化的DataContractSerializer对象用于序列化和反序列化对象.

我问这个问题是因为我知道缓存XmlSerializer类实例是一个好主意,因为它们在内存下创建动态程序集,并且在内存中动态创建的程序集不会被垃圾回收.

我读到DataContractSerializer依赖于轻量级代码生成,但我并不常常了解它的细节.这就是为什么我问这个问题,我需要了解如果我根据需要实例化DataContractSerializer实例,它会导致我像XmlSerializer那样导致内存泄漏?

我选择使用DataContractSerializer而不是XmlSerializer来序列化内部属性.

解决方法

…it is a good idea to cache the XmlSerializer class instances since they create a dynamic assembly in memory under the hood…

使用XmlSerializer,它实际上取决于您是使用简单构造函数(新的XmlSerializer(typeToHandle)),还是更复杂的构造函数,它们允许您在运行时指定所有属性等.如果你只使用简单的构造函数,它会重新使用背景程序集,所以没有重复的惩罚.

我希望(但尚未测试)DataContractSerializer的工作方式类似;但是简单地缓存它肯定没什么坏处,可能是在一个静态的只读字段中

请注意,DataContractSerializer会限制您可以使用的xml布局…只要您对它有好处;-p

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读