gpt4 book ai didi

file - 解析大文本文件和存储解析信息的任何有效方法?

转载 作者:行者123 更新时间:2023-12-04 22:51:57 24 4
gpt4 key购买 nike

我的目的是解析文本文件并将信息存储在各自的表中。

我必须解析大约 100 个文件夹,其中包含超过 8000 个文件,整个大小约为 20GB。当我试图将整个文件内容存储在一个字符串中时,抛出内存不足异常。

也就是

 using (StreamReader objStream = new StreamReader(filename))
{
string fileDetails = objStream.ReadToEnd();
}

因此我尝试了一种逻辑

     using (StreamReader objStream = new StreamReader(filename))
{

// Getting total number of lines in a file
int fileLineCount = File.ReadLines(filename).Count();

if (fileLineCount < 90000)
{
fileDetails = objStream.ReadToEnd();
fileDetails = fileDetails.Replace(Environment.NewLine, "\n");
string[] fileInfo = fileDetails.ToString().Split('\n');
//call respective method for parsing and insertion
}
else
{
while ((firstLine = objStream.ReadLine()) != null)
{
lineCount++;
fileDetails = (fileDetails != string.Empty) ? string.Concat(fileDetails, "\n", firstLine)
: string.Concat(firstLine);
if (lineCount == 90000)
{
fileDetails = fileDetails.Replace(Environment.NewLine, "\n");
string[] fileInfo = fileDetails.ToString().Split('\n');
lineCount = 0;
//call respective method for parsing and insertion
}
}
//when content is 90057, to parse 57
if (lineCount < 90000 )
{
string[] fileInfo = fileDetails.ToString().Split('\n');
lineCount = 0;
//call respective method for parsing and insertion
}
}
}

这里 90,000 是批量大小,对于我的情况,可以安全处理而不会出现内存不足异常。

该过程仍然需要 2 天以上才能完成。我观察到这是因为逐行阅读。

有没有更好的方法来处理这个问题?

提前致谢:)

最佳答案

您可以使用分析器来检测影响您性能的因素。在这种情况下,很明显:磁盘访问和字符串连接。

  1. 不要多次读取一个文件。让我们看看您的代码。首先,行 int fileLineCount = File.ReadLines(filename).Count();意味着您阅读了整个文件并丢弃了您所阅读的内容。那很糟。扔掉你的if (fileLineCount < 90000)并只保留 else .

无论您是按连续顺序逐行读取还是读取整个文件几乎都没有关系,因为在任何情况下读取都是缓冲的。

  1. 避免字符串连接,尤其是长字符串。

    fileDetails = fileDetails.Replace(Environment.NewLine, "\n");string[] fileInfo = fileDetails.ToString().Split('\n');

真的很糟糕。您逐行阅读文件,为什么要进行此替换/拆分? File.ReadLines()为您提供所有行的集合。只需将其传递给您的解析例程即可。

如果你能正确地做到这一点,我希望能有显着的加速。可以通过在主线程中处理文件的同时在单独的线程中读取文件来进一步优化它。但这是另一个故事。

关于file - 解析大文本文件和存储解析信息的任何有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26485451/

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