从C#中的大文本文件读取导致内存泄漏

waz*_*day 0 c# memory-leaks

我正在尝试从大文本文件中读取,每行上都带有一个单词,然后将所有值放入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);
Run Code Online (Sandbox Code Playgroud)

然后,我遍历数组,将每个值添加到数据库中,但是当文件很大时,它根本无法工作。

小智 5

像这样做:

// 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 ...
    }
}
Run Code Online (Sandbox Code Playgroud)

同样,不要忘记异常处理。