从 c# 中的大型文本文件读取导致内存泄漏
本文关键字:读取 内存 泄漏 文件 文本 大型 | 更新日期: 2023-09-27 18:36:04
我正在尝试从每行都有一个单词的大型文本文件中读取,并将所有值放入SQL数据库中,使用较小的文本文件可以正常工作,但是当我有一个较大的文本文件时,例如300,000行,我的内存不足。
避免这种情况的最佳方法是什么?有没有办法只读取文件的一部分,将其添加到数据库中,然后将其从内存中取出并继续下一部分?
这是我到目前为止的代码:
string path = Server.MapPath("~/content/wordlist.txt");
StreamReader word_stream = new StreamReader(path);
string wordlist = word_stream.ReadToEnd();
string[] all_words = wordlist.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
然后,我遍历数组,将每个值添加到数据库中,但是当文件很大时,它根本不起作用。
这样做:
// Choose the size of the buffer according
// to your requirements and/or available memory.
int bufferSize = 256 * 1024 * 1024;
string path = Server.MapPath("~/content/wordlist.txt");
using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read))
using (BufferedStream bufferedStream = new BufferedStream(stream, bufferSize))
using (StreamReader reader = new StreamReader(bufferedStream))
{
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
... put line into DB ...
}
}
另外,不要忘记异常处理。
尝试收益率
回报
StreamReader r = new StreamReader(path);
while( !r.EndOfStream )
{
string line = r.ReadLine();
yield return line;
}
也许你读了十行产生返回它们,将它们写入数据库,然后是下一部分。