Как я могу оптимизировать или ограничить использование процессора zip-процессом (DotNetZip) в c #? - PullRequest
5 голосов
/ 29 апреля 2011

Добрый день, ребята

У меня есть приложение, которое я использую для архивирования папки с помощью библиотеки DotNetZip. Я замечаю, что когда дело доходит до самого процесса "архивирования", он использует 100% процессорного времени. Это приложение будет использоваться совместно с другим (приложение tcp chat), поэтому мне действительно нужно, чтобы оно использовало как можно меньше процессоров.

Есть ли способ, которым я могу безопасно ограничить процессор? Я пытался снизить приоритет, но это не имеет значения. Единственное, что у меня сейчас есть, это установка сродства только на 1 ядро, чтобы оно использовало 50%. Но, конечно, это будет работать только на многоядерных компьютерах.

Ответы [ 3 ]

7 голосов
/ 07 мая 2011

DotNetZip по умолчанию будет работать в нескольких потоках для обеспечения более быстрого сжатия за счет использования процессора и памяти.В многоядерной системе это может потреблять 100% всех ваших процессоров при достаточной пропускной способности ввода-вывода.

Если вы не хотите этого, вы можете установить ZipFile.ParallelDeflateThreshold в -1.Это говорит "никогда не используйте несколько потоков для сжатия".Это по-прежнему будет использовать весь процессор, который может получить один поток;на одноядерной машине с одним процессором это все равно будет 100%.Типичный ноутбук текущей версии - это двухъядерный компьютер;в этом случае он будет показывать 50% использования процессора, потому что одно ядро ​​будет полностью насыщено.

Если вы работаете на многоядерном компьютере и хотите, чтобы ваше коммуникационное приложение tcp продолжало работать беспрепятственно,Вы можете начать работу DotNetZip в фоновом потоке и установить свойство, которое я упоминал выше.Для большей изоляции вы можете выделить DotNetZip в отдельный процесс и установить приоритет affinity + для этого процесса в дополнение к настройке свойства порога parellel.

4 голосов
/ 29 апреля 2011

Понижение приоритета - это то, что вы хотите, необязательно заставляя процесс использовать только произвольное количество ЦП, например, 50%.

Это означает, что процесс будет использовать столько же неиспользованных процессорных мощностей ЦП, и что ваши другие более важные процессы будут по-прежнему работать почти так, как если бы процесс Zip вообще не работал .

Мне следует подумать, что процесс с низким приоритетом использует только 100% ЦП, потому что больше ничего нет. Как только вы запустите и запустите другой процесс (ы) и попробуете его снова, вы заметите, что процесс Zip не будет использовать 100%.

2 голосов
/ 29 апреля 2011

Снижая приоритет, вы делаете то, что вам нужно. Установка сродства к одному также поможет, когда это применимо.

Если другому процессу требуется процессор, ваш процесс с удовольствием отойдет в сторону, поэтому пользователь не должен заметить замедления. Нет ничего плохого в том, чтобы использовать 100% ЦП, если только вы не загружаете его. Теоретически, вы хотите, чтобы ваше приложение использовало процессор, когда оно ему нужно, и отказывалось от него, когда оно этого не делает.

...