У меня есть код, который читает текстовый файл и заполняет. Net datatable. Код отлично работает, когда он читает меньший размер текстового файла, который имеет 100 000 строк данных. (см. ниже ниже). Когда я пытаюсь прочитать размер большего текстового файла, например 200 МБ, и имеет 3,6 млн. строк данных, это исключает исключение System.OutofMemoryException. Хотелось бы спросить эффективный способ чтения больших данных в определенные куски.System.OutofMemoryException при чтении большого текстового файла с использованием C#
using (var stream = File.Open(filePath, FileMode.Open))
{
var content = new StreamContent(stream);
var fileStream = content.ReadAsStreamAsync().Result;
if (fileStream == null) throw new ArgumentException(Constants.FileEmptyErrorMessage);
using (var bs = new BufferedStream(fileStream))
{
using (var reader = new StreamReader(bs, Encoding.GetEncoding(Constants.IsoEncoding)))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
if (!String.IsNullOrEmpty(line))
{
string[] rows = line.Trim().Split(new char[] { ';' }, StringSplitOptions.None);
DataRow dr = Table.NewRow();
dr[Constants.Percepcion] = rows[0];
dr[Constants.StartDate] = DateTime.ParseExact(rows[2].ToString(), "ddMMyyyy",
CultureInfo.InvariantCulture);
dr[Constants.EndDate] = DateTime.ParseExact(rows[3].ToString(), "ddMMyyyy",
CultureInfo.InvariantCulture);
dr[Constants.CID] = rows[4];
dr[Constants.Rate] = rows[8];
Table.Rows.Add(dr);
}
}
}
}
}
Что вы будете делать с таблицей после добавления строк к ней? –
Вы можете попробовать изменить размер буфера, используя другой конструктор для вашего BufferedStream, например. 'new BufferedStream (fileStream, 1024)'. – ManoDestra
Возможный дубликат [Как прочитать большой (1 ГБ) txt-файл в .NET?] (Http://stackoverflow.com/questions/4273699/how-to-read-a-large-1-gb-txt- file-in-net) – bluetoothfx