gpt4 book ai didi

C# - 分部分加载 XML 文件

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

我的任务是加载新数据集(以 XML 文件编写),然后将其与“旧”数据集(也是以 XML 格式)进行比较。所有更改都写入另一个文件。

我的程序将新文件和旧文件加载到两个数据集中,然后逐行比较新集和旧集的主键。当我找到相应的行时,我检查所有字段,如果与旧的有差异,我将其写入第三组,然后将这组写入文件。

现在我使用:

    newDS.ReadXml("data.xml");
oldDS.ReadXml("old.xml");

然后我只找到具有相应主键的行并比较其他字段。它适用于小文件。

问题是我的文件可能有大约 4GB。如果我的新数据和旧数据那么大,那么将 8GB 的​​数据加载到内存中是很有问题的。

我想分段加载我的数据,但为了比较我需要整个旧数据(或者如何从 XML 文件中获取具有相应主键的特定行?)。

另一个问题是我不知道 XML 文件的结构。由用户定义。

处理如此大的文件的最佳方式是什么?我考虑过使用 LINQ to XML,但我不知道它是否有可以帮助解决我的问题的选项。也许离开 XML 并使用不同的东西会更好?

最佳答案

您应该离开 XML 是完全正确的。对于这种规模的数据集,它不是一个好的工具,尤其是当数据集由许多具有相同结构的“记录”组成时。 4GB 的文件不仅笨重,而且几乎任何用于加载和解析它们的东西都会使用比文件大小更多的内存开销。

我建议您查看涉及 SQL 数据库的解决方案,但我不知道在您“不知道[文件的]结构”的情况下分析一个 4GB 的文件有何意义,因为“它由用户定义”。如果您不了解文件的结构,您认为“行”和“主键”是什么意思?您对 XML 了解多少?

这可能是有道理的,例如。读取一个文件,存储一定范围内所有带主键的记录,对另一个文件做同样的事情,做那个数据的比较,然后继续。通过对键空间进行分段,您可以确保始终找到匹配项(如果存在)。以相同的方式将文件分成更小的 block 也可能有意义(尽管我仍然认为这么大的 XML 存储通常是不合适的)。你能再多说一下这个问题吗?

关于C# - 分部分加载 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18440038/

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