Потоки против процессов в .NET

У меня есть длительный процесс, который читает большие файлы и записывает сводные файлы. Чтобы ускорить процесс, я обрабатываю несколько файлов одновременно, используя обычные старые потоки:

ThreadStart ts = new ThreadStart(Work);
Thread t = new Thread(ts);
t.Start();

Я обнаружил, что даже с отдельными потоками, читающими отдельные файлы, без блокировки между ними и с использованием 4 потоков на 24-ядерном блоке, Я даже не могу получить до 10% на CPU или 10% на дисковом вводе-выводе. Если я использую больше потоков в своем приложении, оно будет работать еще медленнее.

Думаю, я делаю что-то не так, но любопытно, что если я запускаю весь exe второй и третий раз, то он фактически обрабатывает файлы в два или три раза быстрее. У меня вопрос: почему я не могу получить 12 потоков в одном приложении для обработки данных и обложения машины, а также 4 потока в 3 экземплярах моего приложения?

Я профилировал приложение и самый трудоемкий а часто вызываемые функции - это все вызовы обработки строк.

8
задан powlette 29 September 2011 в 13:21
поделиться