gpt4 book ai didi

c# - Linq to Xml,保持 XDocument 加载?

转载 作者:数据小太阳 更新时间:2023-10-29 02:24:42 26 4
gpt4 key购买 nike

假设我正在制作一个 WinForms 程序,它将在后台使用 XML 文档作为持久性机制...

以下两种方法的优缺点是什么...

  1. 在每个方法调用中加载 XDocument:

    public class XmlFoosRepository
    {
    string xmlFileName;

    public XmlFoosRepository(string xmlFileName)
    {
    this.xmlFileName = xmlFileName;
    }

    public int AddFoo(Foo foo)
    {
    var xDoc = XDocument.Load(xmlFileName); // Always call Load()

    // ...

    xDoc.Save(xmlFileName);
    return foo.ID;
    }

    public IEnumerable<Foo> GetFoos()
    {
    var xDoc = XDocument.Load(xmlFileName); // Always call Load()

    // ...

    return foos;
    }
    }

  1. 将 XDocument 保存在内存中...

    public class XmlFoosRepository
    {
    XDocument xDoc;

    public XmlFoosRepository(string xmlFileName)
    {
    xDoc = XDocument.Load(xmlFileName); // Now in memory
    }

    public int AddFoo(Foo foo)
    {
    // ...

    xDoc.Save(xmlFileName);
    return foo.ID;
    }

    public IEnumerable<Foo> GetFoos()
    {
    // ...

    return foos;
    }
    }

最佳答案

第一个似乎有点低效,因为每次访问 XML 文档时都加载它没有任何好处。使用选项 1,您必须先访问磁盘,然后将 XML 文件加载到内存中,然后才能访问它。转到磁盘是您可以使用现代计算机执行的最昂贵的操作之一,应该尽可能避免。

话虽这么说,如果 XML 文件太大以至于内存占用非常大,那么您可能希望只加载它一小段时间。但是,如果内存占用如此之大,那么您可能需要研究一种不同的持久化数据方式,这种方式不需要您一次加载整个文档来进行修改。

关于c# - Linq to Xml,保持 XDocument 加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8123724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com