多次初始化一个变量
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(但线程安全)。
我有一个用于序列化特定输入类型的 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(但线程安全)。