C#中的静态XML序列化程序是否会导致内存过度增长?
我就是找不到一个简单的答案来回答这个来自谷歌博士的简单问题。我有下面的序列化函数,我把它放在一个静态模块中。我的应用程序多次调用它来序列化大量XML文件。这会导致内存过度增长吗?(忽略代码的文本写入部分)C#中的静态XML序列化程序是否会导致内存过度增长?,c#,.net,memory-management,methods,static,C#,.net,Memory Management,Methods,Static,我就是找不到一个简单的答案来回答这个来自谷歌博士的简单问题。我有下面的序列化函数,我把它放在一个静态模块中。我的应用程序多次调用它来序列化大量XML文件。这会导致内存过度增长吗?(忽略代码的文本写入部分) publicstaticvoidserializetoxml(字符串填充名,T) { XmlSerializer serializer=新的XmlSerializer(t.GetType()); 字符串FullName=inFilename; TextWriter TextWriter=新St
publicstaticvoidserializetoxml(字符串填充名,T)
{
XmlSerializer serializer=新的XmlSerializer(t.GetType());
字符串FullName=inFilename;
TextWriter TextWriter=新StreamWriter(全名);
serializer.Serialize(textWriter,t);
textWriter.Close();
Dispose();
}
这会导致内存过度增长吗
不,不会有过度增长的记忆static
将允许您调用SerializeToXML
方法,而无需创建类的新实例。没有别的了
因此,如果您多次调用此方法,您甚至可以使用静态
方法来减少内存使用量
虽然编写时忽略了文本写入部分,但对于非托管资源,应使用:
public static void SerializeToXML<T>(String inFilename,T t)
{
XmlSerializer serializer = new XmlSerializer(t.GetType());
string FullName = inFilename;
using (TextWriter textWriter = new StreamWriter(FullName))
{
serializer.Serialize(textWriter, t);
textWriter.Close();
}
}
publicstaticvoidserializetoxml(字符串填充名,T)
{
XmlSerializer serializer=新的XmlSerializer(t.GetType());
字符串FullName=inFilename;
使用(TextWriter TextWriter=new StreamWriter(全名))
{
serializer.Serialize(textWriter,t);
textWriter.Close();
}
}
这会导致内存过度增长吗
不,不会有过度增长的记忆static
将允许您调用SerializeToXML
方法,而无需创建类的新实例。没有别的了
因此,如果您多次调用此方法,您甚至可以使用静态
方法来减少内存使用量
虽然编写时忽略了文本写入部分,但对于非托管资源,应使用:
public static void SerializeToXML<T>(String inFilename,T t)
{
XmlSerializer serializer = new XmlSerializer(t.GetType());
string FullName = inFilename;
using (TextWriter textWriter = new StreamWriter(FullName))
{
serializer.Serialize(textWriter, t);
textWriter.Close();
}
}
publicstaticvoidserializetoxml(字符串填充名,T)
{
XmlSerializer serializer=新的XmlSerializer(t.GetType());
字符串FullName=inFilename;
使用(TextWriter TextWriter=new StreamWriter(全名))
{
serializer.Serialize(textWriter,t);
textWriter.Close();
}
}
谢谢,但是关于“XmlSerializer serializer=new XmlSerializer(t.GetType());”我正在为每个项目创建一个新实例call@user1034912. 垃圾回收将处理它,只有方法是静态的。那么您需要经常调用垃圾回收器吗?@user1034912。一切都是自动完成的,在几乎所有情况下,您都可以忽略它的存在。谢谢,但它怎么知道我仍然没有使用该内存对象呢?谢谢,但是“XmlSerializer serializer=new XmlSerializer(t.GetType());”我正在为每个对象创建一个新实例call@user1034912. 垃圾回收将处理它,只有方法是静态的。那么您需要经常调用垃圾回收器吗?@user1034912。一切都是自动完成的,在几乎所有的情况下,你都可以忽略它的存在。谢谢,但它怎么知道我仍然没有使用那个内存对象呢?