Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Производительность приложения


Автор: Wanderer2019 22.7.2009, 17:57
Привет,

подскажите - кто может сталкивался. 

Создал некое тестовое приложение (консольное) - для испытаний производительности работы 1 или нескольких потоков. 

Функция в потоке копирует файл из папки А и считывает его в byte[]. 

В случае с несколькими потоками - общий массив файлов разбивается на равные части и каждая часть (т.е. каждый файл в части) проходит ту же операцию, что и в случае с 1 потоком. 

Так вот - выгоды в производительности совершенно не ощущается. Видимо проблема в том, что операцию ведутся в файловой системой. Может кто в курсе - как ускорить потоковую обработку файлов?

Автор: wester 22.7.2009, 18:23
глупый вопрос , smile
а процессор позволяет такие операции ?

Автор: Wanderer2019 22.7.2009, 18:58
Цитата(wester @  22.7.2009,  16:23 Найти цитируемый пост)
глупый вопрос , smile
а процессор позволяет такие операции ? 


ну насколько я понимаю тут скорей вопрос не в процессоре (ведь есть же понятие многопоточности), а в жестком диске - скорей всего он может читать только 1 файл в единицу времени. 

Автор: wester 22.7.2009, 19:03
нет, думаю больше в процессоре , так как если C2D или более , то значит он может обрабатывать потоки параллельно 
а если одноядерный и один,то ему надо будет постоянно переключаться между двумя потоками , как вывод выиграша в производительности нет 

на скорость ФС я бы смотрел в последнюю очередь 

хорошая статья http://www.rsdn.ru/?article/dotnet/CSThreading1.xml

Автор: Wanderer2019 22.7.2009, 19:13
wester, 
пробовали запускать как на 1, так и на 2 ядерных процах. Толку никакого. Что в 1 потоке занимает определенное время N, что в 30 - на обработку того же объема данных уходит это же самое время N.
Видимо никак не ускорить чтение. 

Автор: mihryak 22.7.2009, 19:28
Цитата(wester @  22.7.2009,  20:03 Найти цитируемый пост)
на скорость ФС я бы смотрел в последнюю очередь 

а я бы - всё же в первую
насколько я понимаю, доступ к винчестеру всё же должен быть последовательным, физически даже - головка только в одном месте может находиться
понятно, что есть упреждающее чтение (т.е. никогда не прочитается всего лишь один байт), само чтение происходит асинхронно, но быстрее времени суммарного времени чтения всех файлов всё равно не прыгнуть, при этом стоит заметить, что "рваный" доступ к ФС отнюдь в свою очередь не способствует росту производительности, т.к. сбивает с толку эти самые упреждающие выборки
другими словами, мне кажется, что потенциальный рост общей производительности при использовании многопоточности будет только там, где основная работа происходит в CPU, в остальных случаях МП - лишь способ не расстраивать пользователя неотвечающим приложением
всё это мои домыслы, надо бы почитать Рихтера, но, на мой взгляд, довольно правдоподобно

Автор: wester 22.7.2009, 20:01
Цитата

рост общей производительности при использовании многопоточности будет только там, где основная работа происходит в CPU

именно

хотя сказанное зависит от самого накопителя , ведь в RAID массивах головок больше 



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)