Hei!Чтение нескольких файлов в потоке
Как я могу прочитать сразу несколько текстовых файлов? Что я хочу сделать, это прочитать ряд файлов и добавить их в один большой файл. Curently Я делаю это:
- взять каждый файл и открыть его с StreamReader
- читать StreamReader полностью в StringBuilder и добавить его к текущему StreamBuilder
- чек, если размер памяти превышен, и если да напишите StringBuilder в конце файла и пустите StrigBuilder
К сожалению, я заметил, что скорость чтения составляет всего 4 МБ/с. Я заметил, что при перемещении файлов по диску я получаю скорость 40 МБ/с. Я подумываю о буферизации файлов в потоке и прочтении их всех сразу, как и при написании. Любая идея, как я могу это достичь?
Update:
foreach (string file in System.IO.Directory.GetFiles(InputPath))
{
using (StreamReader sr = new StreamReader(file))
{
try
{
txt = txt+(file + "|" + sr.ReadToEnd());
}
catch // out of memory exception
{
WriteString(outputPath + "\\" + textBox3.Text, ref txt);
//sb = new StringBuilder(file + "|" + sr.ReadToEnd());
txt = file + "|" + sr.ReadToEnd();
}
}
Application.DoEvents();
}
Это, как я делаю это сейчас.
Какую версию .Net вы используете? – svick
Я использую: .net 3.5 –
Почтовый индекс. Потоковые классы в .NET могут сделать намного лучше, чем это. Кроме того, в зависимости от версий .NET существуют методы для потоков, которые можно напрямую копировать из одного потока в другой через .CopyTo, которые не требуют посредника. – Joe