使用StreamReader和XmlSeriizer的内存泄漏我已经在谷歌搜索了几个小时,尝试了不同的东西,但似乎无法做到这一点.当我运行这段代码时,内存使用量不断增加。while (true){
try
{
foreach (string sym in stringlist)
{
StreamReader r = new StreamReader(@"C:\Program Files\" + sym + ".xml");
XmlSerializer xml = new XmlSerializer(typeof(XMLObj), new XmlRootAttribute("rootNode"));
XMLObj obj = (XMLObj)xml.Deserialize(r);
obj.Dispose();
r.Dispose();
r.Close();
}
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
Thread.Sleep(1000);
Console.Clear();
}XMLObj是一个自定义对象。[Serializable()]public class XMLObj: IDisposable{
[XmlElement("block")]
public List<XMLnode> nodes{ get; set; }
public XMLObj() { }
public void Dispose()
{
nodes.ForEach(n => n.Dispose());
nodes= null;
GC.SuppressFinalize(this);
}}我尝试过添加GC.Colect(),但这似乎没有任何作用。
3 回答
慕标5832272
TA贡献1966条经验 获得超4个赞
new XmlSerializer(typeof(XMLObj), new XmlRootAttribute("rootNode"))
XmlSerializer
new XmlSerializer(Type)
static readonly XmlSerializer mySerializer = new XmlSerializer(typeof(XMLObj), new XmlRootAttribute("rootNode"))
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
using
更新
XMLSeriizer构造函数使用反射为要序列化的类型创建临时程序集,而且由于代码生成开销很大,因此程序集按每种类型缓存在内存中。但是很多时候,根名称将被更改,并且可以是动态的,并且它不会缓存动态程序集。因此,每当调用上面的代码行时,它每次都会加载新的程序集,并将一直驻留在内存中,直到卸载AppDomain为止。
- 3 回答
- 0 关注
- 560 浏览
相关问题推荐
添加回答
举报
0/150
提交
取消