多次初始化变量

时间:2015-09-18 18:05:53

标签: constructor heap-memory

我有一个静态函数,用于序列化特定输入类型的Xml文档。 以下是方法:

 Approach 1.
 public static XmlDocument SerializeToXmlDocument<T>(this T o)
 {
      XmlDocument xmlDoc = new XmlDocument();

      using (XmlWriter writer = xmlDoc.CreateNavigator().AppendChild())
      {
           XmlSerializer xmls = new XmlSerializer(typeof(T));
           xmls.Serialize(writer, o);
      }

      return xmlDoc;
 }

 Approach 2.
 static XmlSerializer xmls;
 public static XmlDocument SerializeToXmlDocument<T>(this T o)
 {
      XmlDocument xmlDoc = new XmlDocument();

      using (XmlWriter writer = xmlDoc.CreateNavigator().AppendChild())
      {
           if (xmls == null || xmls.GetType() != typeof(T))
           {
                xmls = new XmlSerializer(typeof(T));
           }
           xmls.Serialize(writer, o);
      }

      return xmlDoc;
 }

从各种页面调用此方法,因此类型可能不同。

考虑到内存的最小使用量,我应该使用哪一个。另外,正如我的架构师所说,GC不会收集XmlSerializer,它会保留在那里。必须只使用这个假设。

问题1)哪种方法更好,为什么?

Q.2)而且,如果我多次初始化单个变量会发生什么。构造函数每次都会将对象分配给对象。但是对象有一个引用,所以它每次都会获得相同的内存空间或不同的内存空间。

1 个答案:

答案 0 :(得分:0)

方法2不是线程安全的,因此以后可能会让您遇到麻烦。

我会使用方法1,并且只有在出现性能问题时才考虑某种方法2(但随后是线程安全的)。