У меня есть миллионы файлов журналов, которые генерируются каждый день, и мне нужно прочитать их все и собрать в один файл, чтобы выполнить какой-то процесс в другом приложении.
Я ищуСамый быстрый способ сделать это.В настоящее время я использую потоки, задачи и параллели, как это:
Parallel.For(0, files.Length, new ParallelOptions { MaxDegreeOfParallelism = 100 }, i =>
{
ReadFiles(files[i]);
});
void ReadFiles(string file)
{
try
{
var txt = File.ReadAllText(file);
filesTxt.Add(tmp);
}
catch { }
GlobalCls.ThreadNo--;
}
или
foreach (var file in files)
{
//Int64 index = i;
//var file = files[index];
while (Process.GetCurrentProcess().Threads.Count > 100)
{
Thread.Sleep(100);
Application.DoEvents();
}
new Thread(() => ReadFiles(file)).Start();
GlobalCls.ThreadNo++;
// Task.Run(() => ReadFiles(file));
}
Проблема в том, что после нескольких тысяч файлов чтения чтение становится все медленнее и медленнее!!
Есть идеи почему?и какие самые быстрые подходы к чтению миллионов маленьких файлов?Спасибо.