相关疑难解决方法(0)

内存泄漏使用StreamReader和XmlSerializer

我一直在谷歌搜索过去几个小时并尝试不同的东西,但似乎不能在这个底部....

当我运行此代码时,内存使用量不断增长.

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();
}
Run Code Online (Sandbox Code Playgroud)

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试添加GC.Collect(); 但这似乎没有做任何事情.

c# xml streamreader xmlserializer

24
推荐指数
4
解决办法
1万
查看次数

C#Xml序列化,集合和根元素

我的应用程序序列化流中的对象.以下是我需要的样本:

<links>
  <link href="/users" rel="users" />
  <link href="/features" rel="features" />
</links>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,对象是"链接"对象的集合.

-----------第一版

起初我使用了DataContractSerializer,但是你不能将成员序列化为属性()

这是对象:

[DataContract(Name="link")]
public class LinkV1
{
    [DataMember(Name="href")]
    public string Url { get; set; }

    [DataMember(Name="rel")]
    public string Relationship { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是结果:

<ArrayOflink xmlns:i="...." xmlns="...">
  <link>
    <href>/users</href>
    <rel>users</rel>
  </link>
  <link>
    <href>/features</href>
    <rel>features</rel>
  </link>
</ArrayOflink>
Run Code Online (Sandbox Code Playgroud)

-----------第二版

好吧,不要安静我想要的东西,所以我尝试了经典的XmlSerializer,但是......哦,不,如果根元素是一个集合,你不能指定根元素和集合元素的名称......

这是代码:

[XmlRoot("link")]
public class LinkV2
{
    [XmlAttribute("href")]
    public string Url { get; set; }

    [XmlAttribute("rel")]
    public string Relationship { get; set; } …
Run Code Online (Sandbox Code Playgroud)

c# xml collections serialization root-node

11
推荐指数
1
解决办法
2万
查看次数