@timzab
Начинающий программист

Как прочесть большой файл около 2 млн строк на C#?

Коллеги, есть задача по обработке файла из 2 000 000 строк. Применение класса StreamReader дает возможность обработать только порядка 100 000 строк, а дальше возникает ошибка "Additional information: CLR не удалось перейти из COM-контекста 0x103bec8 в COM-контекст 0x103bf80 за 60 секунд. Наиболее вероятно, что поток, владеющий контекстом/апартаментом назначения, находится в режиме ожидания или выполнения очень длительной операции без прокачки сообщений Windows."

Пример кода:
StreamReader sr = new StreamReader(fileName, Encoding.GetEncoding(866));

string line = String.Empty;
while ((line = sr.ReadLine()) != null)
{
richTextBox4.AppendText(sr.ReadLine() + "\n");
}
  • Вопрос задан
  • 1229 просмотров
Решения вопроса 2
@Melz
Для визуального отслеживания перекодировки вполне достаточно строк 20 или сколько там в ваше окно помещается.
Если нужно больше - перегружаете прокрутку мышкой и скроллбар и читаете новые строчки.
Писать можно как-то так:

protected void MyFile(string FilePath, string NewFilePath)
{
    using (StreamReader vReader = new StreamReader(filePath, Encoding.GetEncoding(866)))
    using (StreamWriter vWriter = new StreamWriter(newFilePath, true , Encoding.GetEncoding(866)))
    {
        while (!vReader.EndOfStream)
        {
            string vLine = vReader.ReadLine();
            vWriter.WriteLine(vLine);
        }
    }
}


Если все равно хотите в память то берите MemoryMappedFile
Ответ написан
petermzg
@petermzg
Самый лучший программист
StreamReader использует native winapi функции, ему размер файла не критичен. Может прочитать и из файлов куда большего размера.
Но вот зачем вы все эти 2 000 000 строк пихаете в richTextBox4?
1. Кто это просматривать то будет?
2. Он все в памяти хранит.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Sing303
А так не работает?
richTextBox4.LoadFile(fileName, RichTextBoxStreamType.PlainText);
Ответ написан
@timzab Автор вопроса
Начинающий программист
Смысл не в просматривании richTextBox4, а отследить прошло ли перекодирование текста, а после окончания процесса записать файл с требуемой кодировкой.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы