Меня действительно раздражает, что я не могу выполнять несколько задач одновременно, даже если у меня достаточно оперативной памяти и процессорного времени, которые можно использовать. Так что это из-за использования диска, например, когда я извлекаю большие архивы с помощью WinRAR или других программ, требовательных к записи на диск.
Я хочу иметь возможность ограничить это, скажем, до 20%. Так WinRAR будет использовать только до 20% возможностей записи моего диска, что должно привести к
«Больше никаких зависаний моей ОС и возможность многозадачности даже при распаковке большого архива»
при выполнении таких ресурсоемких задач.
Если вы знаете, как ограничить ввод-вывод диска по приложению, то это действительно поможет!
Моя ОС: Windows 7 Ultimate x64. Я пробовал настраивать привязку и приоритет процессов, но безуспешно.
решение1
ВОбозреватель процессов, в дополнение к обычному Normal 8
, Below normal 6
, Idle 4
уровню приоритета, есть дополнительный Background 4
уровень, который говорит, что он имеет Low I/O and Memory Priority
. Background 4
приводит к Very Low
приоритету ввода-вывода, согласно соответствующему столбцу. Это должно достичь того, что вам нужно.
Я думаю, что это доступно в Vista и выше, так какВикипедия предлагаеттогда была добавлена приоритезация ввода-вывода.
Из вашего комментария видно, что вы также хотите сделать это из командной строки. Я не уверен, доступно ли это в Process Explorer, ноPsToolsможет быть что-то полезное в этом отношении. Я знаю, PsExec
что позволяет запускать процессы с низким приоритетом. Если нет, не должно быть слишком сложно набросать программу командной строки или скрипт, чтобы установить приоритет запущенного процесса.
решение2
Комментарий от @AlexandrZarubkin заслуживает большего внимания. Указатель наРусский языковой форум habr.comочень помогает.Троттлсоздал файл реестра, который позволяет навсегда изменить приоритет при запуске исполняемого файла щелчком правой кнопки мыши в проводнике:
Этот текст следует сохранить как .reg
файл и импортировать в реестр Windows:
Windows Registry Editor Version 5.00
;Copyright 2016 Trottle
;This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.
;This program is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
;See <http://www.gnu.org/licenses/> for more details.
[-HKEY_CLASSES_ROOT\exefile\shell\Bpc]
[HKEY_CLASSES_ROOT\exefile\shell\Bpc]
"HasLUAShield"=""
"MUIVerb"="Set base priority"
"subcommands"=""
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\01low]
"MUIVerb"="Idle CPU, lowest IO, low paging"
"Icon"="comres.dll,9"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\01low\command]
@="cmd /q /c echo Windows Registry Editor Version 5.00>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & for /f \"delims=<\" %%i in (\"%1\") do echo [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\%%~nxi\\PerfOptions]>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"CpuPriorityClass\"=dword:00000001>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"IoPriority\"=dword:00000000>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"PagePriority\"=dword:00000001>>%%TEMP%%\\pr.reg & regedit /s %%TEMP%%\\pr.reg & del %%TEMP%%\\pr.reg & msg * %~ni priority is set to IDLE"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\02below]
"MUIVerb"="Below normal CPU, low IO"
"Icon"="comres.dll,12"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\02below\command]
@="cmd /q /c echo Windows Registry Editor Version 5.00>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & for /f \"delims=<\" %%i in (\"%1\") do echo [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\%%~nxi\\PerfOptions]>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"CpuPriorityClass\"=dword:00000005>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"IoPriority\"=dword:00000001>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"PagePriority\"=->>%%TEMP%%\\pr.reg & regedit /s %%TEMP%%\\pr.reg & del %%TEMP%%\\pr.reg & msg * %~ni priority is set to BELOW NORMAL"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\03above]
"Icon"="comres.dll,8"
"MUIVerb"="Above normal CPU"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\03above\command]
@="cmd /q /c echo Windows Registry Editor Version 5.00>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & for /f \"delims=<\" %%i in (\"%1\") do echo [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\%%~nxi\\PerfOptions]>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"CpuPriorityClass\"=dword:00000006>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"IoPriority\"=->>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"PagePriority\"=->>%%TEMP%%\\pr.reg & regedit /s %%TEMP%%\\pr.reg & del %%TEMP%%\\pr.reg & msg * %~ni priority is set to ABOVE NORMAL"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\04high]
"MUIVerb"="High CPU"
"Icon"="comres.dll,16"
"CommandFlags"=dword:00000040
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\04high\command]
@="cmd /q /c echo Windows Registry Editor Version 5.00>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & for /f \"delims=<\" %%i in (\"%1\") do echo [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\%%~nxi\\PerfOptions]>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"CpuPriorityClass\"=dword:00000003>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"IoPriority\"=->>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"PagePriority\"=->>%%TEMP%%\\pr.reg & regedit /s %%TEMP%%\\pr.reg & del %%TEMP%%\\pr.reg & msg * %~ni priority is set to HIGH"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\06ask]
"MUIVerb"="Show current priorities"
"Icon"="shell32.dll,23"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\06ask\command]
@="cmd /q /c for /f \"delims=<\" %%i in (\"%1\") do reg query \"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\%%~nxi\\PerfOptions\" /s | msg *"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\07default]
"MUIVerb"="Restore to default"
"Icon"="comres.dll,4"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\07default\command]
@="cmd /q /c echo Windows Registry Editor Version 5.00>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & for /f \"delims=<\" %%i in (\"%1\") do echo [-HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\%%~nxi\\PerfOptions]>>%%TEMP%%\\pr.reg & regedit /s %%TEMP%%\\pr.reg & del %%TEMP%%\\pr.reg & msg * %~ni priority is restored to default"
; If you do not want to have uninstaller you can skip next part:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\BpcSubMenu]
"DisplayName"="'Set base priority' submenu"
"DisplayIcon"="imageres.dll,73"
"UninstallString"="cmd /q /c echo Windows Registry Editor Version 5.00>%TEMP%\\pr.reg & echo.>>%TEMP%\\pr.reg & echo [-HKEY_CLASSES_ROOT\\exefile\\shell\\Bpc]>>%TEMP%\\pr.reg & echo.>>%TEMP%\\pr.reg & echo [-HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\BpcSubMenu]>>%TEMP%\\pr.reg & regedit /s %TEMP%\\pr.reg & del %TEMP%\\pr.reg"
"DisplayVersion"="1.1"
"URLInfoAbout"="http://habrahabr.ru/post/317802/"
"NoModify"=dword:00000001
"NoRepair"=dword:00000001
Список приоритетных значений
IoPriority Value Priority
0 Very Low
1 Low
2 Normal
3 High
4 Critical (only for memory io)
PagePriority Value Priority
0 Idle
1 Very Low
2 Low
3 Background
4 Background
5 Normal