多次初始化一个变量

Initialize a variable multiple times

我有一个用于序列化特定输入类型的 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;
 }

这个方法是从不同的页面调用的,所以类型可能不同。

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

Q.1) 哪种方法更好,为什么?

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

方法 2 不是线程安全的,因此以后可能会给您带来麻烦。

我会使用方法 1,只有当似乎存在性能问题时才考虑某种方法 2(但线程安全)。