gpt4 book ai didi

c# - 在 C# 中高效读取超大文件。目前正在使用 StreamReader

转载 作者:行者123 更新时间:2023-12-02 22:32:06 24 4
gpt4 key购买 nike

我有一个大小为 50GB 及以上的 Json 文件。以下是我为阅读一小部分 Json 而编写的内容。我现在需要修改它来读取大文件。

internal static IEnumerable<T> ReadJson<T>(string filePath)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
using (StreamReader sr = new StreamReader(filePath))
{
String line;
// Read and display lines from the file until the end of
// the file is reached.
while ((line = sr.ReadLine()) != null)
{
byte[] jsonBytes = Encoding.UTF8.GetBytes(line);
XmlDictionaryReader jsonReader = JsonReaderWriterFactory.CreateJsonReader(jsonBytes, XmlDictionaryReaderQuotas.Max);
var myPerson = ser.ReadObject(jsonReader);
jsonReader.Close();

yield return (T)myPerson;
}
}
}
  1. 如果我在当前代码中构造 StreamReader 时指定缓冲区大小就足够了吗?
  2. 如果我在这里错了,请纠正我。缓冲区大小基本上指定了一次从磁盘读取到内存的数据量。因此,如果文件大小为 100MB,缓冲区大小为 5MB,它会一次读取 5MB 到内存,直到读取整个文件。
  3. 假设我对第 3 点的理解是正确的,对于如此大的文本文件,理想的缓冲区大小是多少? int.Max size 是个坏主意吗?在 64 位 PC 中,int.Max 大小为 2147483647。我假设缓冲区大小以字节为单位,计算结果约为 2GB。这本身会消耗时间。我正在寻找 100MB - 300MB 的缓冲区大小。

最佳答案

它将一次读取一行(输入文件的),可能是 10 个字节,也可能是全部 50GB。所以归结为:输入文件的结构如何?如果输入的 JSON 有换行符 other 而不是在对象之间的中断处干净地换行,这可能会变得很糟糕。

缓冲区大小可能会影响它在寻找每行末尾时读取的量,但最终:它每次都需要找到一个换行符(至少,目前是这样写的) ).

关于c# - 在 C# 中高效读取超大文件。目前正在使用 StreamReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12068934/

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