代码之家  ›  专栏  ›  技术社区  ›  CARLOS LOTH

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

  •  6
  • CARLOS LOTH  · 技术社区  · 17 年前

    我正在编写一个Windows服务应用程序,它需要在XML文档执行期间反复对其进行序列化和反序列化。因为我需要序列化和反序列化编译期间不知道的泛型类型(我不知道需要序列化/反序列化多少类型),所以我想知道是否最好保留我为序列化和反序列化对象而实例化的DataContractSerializer对象的缓存。

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

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

    为了能够序列化内部属性,我选择使用DataContractSerializer而不是XmlSerializer。

    1 回复  |  直到 16 年前
        1
  •  4
  •   Marc Gravell    17 年前

    …缓存XmlSerializer类实例是一个好主意,因为它们在引擎盖下的内存中创建了一个动态程序集…

    XmlSerializer ,这实际上取决于您是否使用 简单的 构造函数(构造器) new XmlSerializer(typeToHandle) )或更复杂的构造函数,允许您在运行时指定所有属性等。如果只使用简单的构造函数,它将重新使用后台程序集,因此不会有重复的惩罚。

    我愿意 期待 (但还没有测试) DataContractSerializer 以类似的方式工作;但是,如果只是在静态只读字段中对其进行高速缓存,肯定没有什么坏处。

    注意 DataContractSerializer 限制您可用的XML布局…只要你没问题;-p