Повышение производительности в длительных операциях - PullRequest
3 голосов
/ 06 июля 2011

У меня есть программа для шифрования файлов. Когда программа шифрует файлы, загрузка процессора не превышает 25%, следовательно, она медленная.

Как заставить ОС назначить ей больше загрузки процессора ? (Например, WinRAR, когда он сжимает файлы, достигает 100% от загрузки процессора).


[Редактировать]: Поскольку у меня 4 ядра, оно использует не более одного ядра. Как я могу заставить его использовать остальные ядра?

Ответы [ 5 ]

2 голосов
/ 06 июля 2011

Если вы не ограничиваете приложение, оно будет использовать столько процессоров, сколько позволяет ОС - что должно быть до 100% по умолчанию.Я предполагаю, что узким местом является какой-то другой ресурс.

Вы передаете данные для шифрования из удаленного местоположения?С диска, который по какой-то причине довольно медленный?

1 голос
/ 06 июля 2011

На всякий случай, если вы используете v4.0, а не назначаете большую нагрузку на процессор, попробуйте использовать Parallel Framework (PFX) . оптимизировано для многоядерных процессоров . .

Parallel.Invoke(() => DoCompress());

Кроме того, Потоки в C # - лучший ресурс, связанный с потоками в юниверсе.

1 голос
/ 06 июля 2011

Иногда люди думают, что высокий процент ЦП означает эффективную программу. Если бы это было так, бесконечный цикл был бы наиболее эффективным из всех.

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

Тогда, если процессорная часть все еще занимает больше времени, чем вы хотели, во что бы то ни стало, обработайте ее на нескольких ядрах.

1 голос
/ 06 июля 2011

Если ваш инструмент однопоточный, то он потребляет только одно ядро!И производительность на этом ядре достигнет 100% в случае, если ваша программа выполняет только цикл for или другой вид цикла.Если инструмент должен выполнять ввод / вывод, тогда он никогда не будет иметь максимальной производительности.И 25% вы видите на все ядра процессора.Насколько я помню, в некоторых постах показано, как отображать процент потребления на каждом ядре процессора!

0 голосов
/ 06 июля 2011

Это не имеет ничего общего с процессором и назначением ресурсов: используемый вами инструмент просто не предназначен для использования всех (я полагаю) четырех ядер процессора.

...