我正在尝试从大文本文件中读取,每行上都带有一个单词,然后将所有值放入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)
同样,不要忘记异常处理。
| 归档时间: |
|
| 查看次数: |
1135 次 |
| 最近记录: |