Я заметил, что когда Excel 2007 (и, возможно, более ранние версии) имеет фокусировку окна, Excel работает на полной скорости, что означает, что файлы открываются быстро, а долго выполняющиеся макросы VBA выполняются быстро.
Если окно Excel теряет фокус, приоритет потока Excel, по-видимому, резко падает, и большие файлы, которые открывались, когда вы медленно перемещали фокус, открываются, а сложные макросы VBA занимают много времени.
Есть ли способ сохранить высокий приоритет Excel независимо от того, является ли он сфокусированным или нет?
Я знаю, что мог бы искусственно повысить приоритет потока с помощью диспетчера задач, но я не уверен, какие это могут быть последствия для моих таблиц или ОС.
Моя система представляет собой быстрый двухъядерный процессор с 4 Гб оперативной памяти и работает под управлением Vista 64.
РЕДАКТИРОВАТЬ ДЛЯ УТОЧНЕНИЯ:
Моя проблема не просто в повышении приоритета процесса Excel с помощью диспетчера задач, потому что это влияет только на Excel, когда у него есть фокус окна.
Дело в том, что происходит, когда Excel теряет фокус окна.
С помощью Excel широко, оказывается , что, в соответствии с проектом , он намеренно опускает свой собственный приоритет процесса , когда окно Excel не имеет фокуса.
Установка более высокого приоритета для процесса Excel не мешает этому произойти - он только дает Excel более высокий приоритет процесса, когда он имеет фокус, но он все еще резко падает, когда теряет фокус.
При обычном использовании Excel (вероятно, 99% всех, кто его использует) вы не заметите этот эффект, но с массивной электронной таблицей (я думаю, около 2000 листов) и сложными макросами VBA, выполнение которых занимает несколько минут, эффект очень заметно.
В идеале мне нужно, чтобы он сохранял одинаковый приоритет потока независимо от того, фокусируется ли окно Excel.
До сих пор я просто отсиживался от компьютера несколько минут во время обработки, чтобы случайно не щелкнуть окно Excel, когда оно хрустит, но я просто надеялся, что есть лучшее решение ... возможно взломать реестр какой-то?
РЕДАКТИРОВАТЬ:
Я только когда-либо нашел еще одно упоминание об этой проблеме в сети по этой ссылке
Это соответствующая цитата ...
Однако если я сделаю окно Excel 2000 видимым для пользователя, а также оставлю его в фокусе, макросы будут выполняться с ожидаемой скоростью. Опять же, окно должно иметь фокус, или макрос снова замедляет сканирование.
Ответы:
Несерверные выпуски Windows по умолчанию обеспечивают повышение приоритета переднего плана. Когда вы толкаете Excel в фоновый режим, он теряет тот импульс, который ранее был на переднем плане; какая-то другая программа вместо этого получает повышение приоритета.
Вы можете изменить настройку, чтобы программы больше не получали такой импульс. Примечание. Это повлияет не только на Excel, но и на любую программу, которая в противном случае получила бы повышение.
Вот как настроить параметры в Windows XP:
Перейдите на вкладку « Дополнительно ». Первая панель - Планирование процессора :
Измените его со значения по умолчанию «Программы» на «Фоновые службы», и это должно привести к тому, что Excel будет вести себя ближе, чем вы хотите, когда он находится в фоновом режиме.
источник
Я не думаю, что есть проблема с изменением приоритета процесса Excel на Above Normal в вашем случае. Это не должно быть проблемой.
Не делайте это самый высокий , где он будет конкурировать с системными процессами.
Не приостанавливайте его, иначе на нем могут быть приостановлены другие вещи!
Если вы используете Марк Руссинович «s Process Explorer
посмотреть на приоритеты процессов , запущенных в системе.
Он показывает следующие значения приоритета и их связь.
Вы можете использовать Process Explorer и попробовать изменить приоритеты для Excel .
Переместите это выше 8 , но не выходите за пределы 12
выше нормального в 10 , я должен ожидать.
Кроме того, если вы думаете, что какой-то процесс занимает слишком много процессорного времени, в то время как не в фокусе, вы можете понизить его приоритет вплоть до простоя .
Я обычно использую эту технику для этого.
источник
am
ищу эту деталь, но, насколько я понимаю, окно в фокусе обычно имеетNormal
приоритет (по умолчанию), и после переходаExcel
кAbove Normal
приоритету оно должно работать с более высоким приоритетом, чем окно с фокусом. Но при более низком приоритете, чем система, процессы - то, где вы хотите, чтобы это было.Здесь необходимо учитывать несколько моментов: когда вы меняете приоритет процесса, этот базовый приоритет наследуется всеми его потоками и другими процессами, которые он запускает. Текущий приоритет формируется из базового приоритета и ряда факторов, которые определяют, следует ли его повышать или нет - нахождение на переднем плане само по себе не обязательно повышает приоритет, но такие вещи, как выход из состояния ожидания или выполнение некоторого ввода-вывода, могут дать короткий временный импульс.
Я бы предположил, что выполнение вашего процесса Excel с высоким приоритетом при работе с этими очень интенсивными рабочими книгами может иметь смысл, и я бы сказал, что второй способ под названием «Высокоприоритетный Excel» может быть хорошим способом сделать это. Сначала создайте однострочный пакетный файл, который запускает команду запуска с соответствующими переключателями, например:
start "high priority excel" /max /high "C:\Program Files\Microsoft Office\Office12\EXCEL.EXE"
(в 64-разрядной версии Windows это будет происходить,
start "high priority excel" /max /high "C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE"
если только вы не используете 64-разрядную версию Office, которая доступна только для 2010 годаstart "high priority excel" /max /high "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE"
). Обратите внимание, что заголовок окна может быть любым, но не обязательным.Теперь сохраните это как, например, HiperExcel.cmd где-нибудь под рукой - может быть, офисную папку, или папку ac: \ scripts или что-то подобное, или вашу домашнюю папку, чтобы это могло перемещаться с компьютера на компьютер. Создайте новый ярлык, который указывает на этот файл, сделайте стартовую папку папкой, в которой хранится файл. Выберите значок для файла. Перейдите к исполняемому файлу Excel.exe, а затем для ясности выберите что-то, кроме обычного значка Excel .
Щелкните ваш новый ярлык, и он вызовет Excel, запущенный как процесс с высоким приоритетом, с базовым приоритетом 13, а при запуске он, вероятно, получит максимальный приоритет для процессов не в реальном времени, равных 15. Даже если что-то еще получит импульс, это не должно получить более высокий приоритет. Обратите внимание, что процесс переднего плана НЕ получает повышение приоритета только за то, что находится на переднем плане (не начиная с NT4.0). Так, что происходит?
Подчеркните то, что мы знаем до сих пор: процессы становятся по очереди в соответствии с приоритетом, но не с абсолютным исключением процессов с более низким приоритетом (ну, на самом деле, с потоками, но давайте оставим процессы для удобства обсуждения). Что происходит, когда процесс получает свою «очередь»? Он запускается на единицу времени, называемую квантом. Как долго это квант? Это зависит...
Именно здесь процесс переднего плана использует больше ресурсов - когда он получает ход, этот ход может длиться в три раза дольше, чем ход фоновых процессов. Так что это может не получиться очень часто (в зависимости от приоритета), но когда это произойдет, оно затянет его надолго.
Вы можете выбрать использование коротких или длинных квантов (по умолчанию - короткая для ОС рабочей станции, длинная на серверах), а также для ускорения или ускорения процесса переднего плана (переменная для w / s, фиксированная для серверов по умолчанию) и, если она повышена, сколько (эффективно до 3 раз). Теперь уловка состоит в том, что если вы решите изменить множитель, вы получите все с очень короткими значениями для кванта, тогда как если вы отключите форсирование переднего плана, все получится длиннее, но в равной степени. Если вы отключите его, конечно, фоновые службы Windows получат ту же квоту, что и ваши пользовательские приложения, что может быть не идеальным. Необходимо установить значение в реестре по адресу: HKLM \ System \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparation, используя битовую маску. Чтобы упростить задачу, наиболее вероятные значения:
2 = значение по умолчанию, означает использование значений по умолчанию с максимальным усилением. значения по умолчанию на рабочей станции O / S являются короткими и переменными. 8 = фиксированный, короткий квант (передний и задний фоны равны) 40 (десятичный, шестнадцатеричный x28) = фиксированный и длинный (то же самое, что и значения по умолчанию для сервера) 36 (десятичный, шестнадцатеричный x24) = короткий, переменный, но минимальное усиление для процесса переднего плана , Я думаю, что это тот, который, вероятно, даст вам наибольшую выгоду, чтобы уменьшить количество конкурирующих приложений, но позволит Excel получить больше ресурсов, когда на переднем плане (если вы также повысите его приоритет).
Попробуйте и посмотрите, надеюсь, это поможет - ваш пробег может меняться, конечно.
Кроме того: во многих других приложениях или процессах узким местом является центральный процессор - ваши примеры синхронизации Outlook и просмотра IE, вероятно, имеют сеть, и, возможно, для Outlook некоторые дисковые операции ввода-вывода являются более важными факторами их скорости, так что они получают Повышение на переднем плане или нет, влияние видимой производительности, вероятно, ниже того, что вы можете увидеть простым наблюдением.
источник
Нет проблем с повышением приоритета процесса до «выше нормального» или «высокого», просто не устанавливайте его в «реальном времени». Не могу вам помочь с Excel, особенно извините.
источник
Возможно, что манипулирование приоритетами выполняется не Excel, а самой Windows. В Windows есть механизм, где повышается приоритет процессов с окнами на переднем плане ; поэтому, когда Excel теряет фокус, его приоритет возвращается к нормальному (что немного ниже).
Единственная страница в MSDN, которую я смог найти с помощью быстрого поиска, - это Priority Boosts :
Из того, что я слышал, есть способы отключить повышение приоритета.
источник
Просто попробуйте, это сработало для меня.
Не очень хороший способ, но он фактически удвоил мою скорость вычислений! Удивительно! (но я проверю результаты, не уверен насчет них ...)
Ваша форма пользователя должна быть в центре экрана в 1024 * 768. Это просто отправить с помощью программного обеспечения правой кнопкой мыши на пользовательской форме.
Полный расчет, но не используйте ваш компьютер, пока он рассчитывает (запуск других программ, Windows ..).
Просто попробуйте и скажите мне, как это сработало для вас!
источник
После долгой ночи расчета полной скорости и после проверки результаты этого утра были ... совершенно неверными.
Так что я думаю, что это просто ошибка, вычисления не выполнены должным образом.
Нажатие на пользовательскую форму в расчете просто ускорит скорость процесса, но не полностью пересчитает лист за его пределами. Я точно, я был в реальном времени с Prio.
Еще одна приятная вещь - настроить задачу процесса с помощью prio_x64_199_2367.exe, http://softziz.com/2010/11/prio-64-bit-1-9-9/
Это сохранит ваш приоритет процесса, определенный с помощью CTRL ALT DEL, внутри диспетчера задач, для использования в будущем.
С уважением,
Джон
источник