Як утримувати Microsoft Excel на повній швидкості навіть тоді, коли він не має фокусу на вікні?


10

Я помітив, що коли 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 видимим для користувача, а також утримую вікно у фокусі, макроси виконуються із очікуваною швидкістю. Знову ж, у вікні має бути фокус або макрос сповільнюється, щоб знову повзати.


Хороше питання. Це також виявило для мене дратівливу «особливість», і досі не існує справжнього рішення ...
Noldorin

Пріоритет нитки сам по собі не впливає на продуктивність, якщо не існує декількох ниток, що змагаються за ресурс - у такому випадку більший пріоритет отримує перший шматочок пирога. Я давно не використовую Excel, але він може перестати гаситись у фоновому режимі, або ви можете стати жертвою дещо відсталої механіки обміну Windows.
Марк К Коуан

Це відбувається з усіма програмами Office 2007 при запуску довгих сценаріїв VBA. Я колись написав сценарій, який брав дані від excel і розміщував їх у формах Word. Якщо я приховав програму Word, виправдання впало на повзання. Якщо я дозволив показувати програму, сценарій був на 10 разів швидшим.
wbeard52

Відповіді:


6

Несерверні видання Windows за замовчуванням забезпечують пріоритетне збільшення процесу переднього плану. Коли ви натискаєте Excel на другий план, він втрачає прискорене зростання, яке раніше було на передньому плані; якась інша програма замість цього набирає пріоритет.

Ви можете змінити налаштування, щоб програми більше не отримували цей приріст. Примітка. Це не вплине лише на Excel, але будь-яку програму, яка в іншому випадку була б кваліфікована для підвищення.

Ось як змінити налаштування в Windows XP:

  1. Клацніть правою кнопкою миші Мій комп'ютер .
  2. Виберіть " Властивості" .
  3. Перейдіть на вкладку Додатково .
  4. На панелі « Продуктивність» натисніть кнопку « Налаштування ».
  5. Перейдіть на вкладку Додатково . Перша панель - це планування процесорів :

    Панель планування процесора

  6. Змініть його з типового на "Програми" на "Фонові сервіси", і це повинно спричинити, що Excel поводиться ближче до того, як вам потрібно, коли він знаходиться у фоновому режимі.


Зауважте, що завдяки цьому програми переднього плану часто здадуться млявими, коли фонові програми та служби раптом вирішать, що хочуть щось зробити.
Марк К Коуан

"Несерверні видання Windows за замовчуванням забезпечують пріоритетне збільшення процесу переднього плану." Ні, вони ні. (Вони робили до Windows NT 4, але це дуже давно.) Те, що вони роблять, - зробити часовий фрагмент для переднього плану 3 рази довшим, ніж часовий відрізок для інших процесів (90 мс проти 30). Існує також посилення пріоритету +2, яке застосовується до будь-якого потоку в передньому плані, коли воно вирішує очікування. Проблема із запропонованим тут рішенням полягає в тому, що це призводить до того, що часовий відрізок стає ще довшим, 180 мс. Це може різко зашкодити реакції додатків, що інтенсивно користуються інтерфейсом.
Джеймі Ханрахан

4

Я не думаю, що у вашому випадку немає проблеми зі зміною пріоритету процесу в Excel на " вище норми" . Це не повинно бути проблемою.

Не робіть його найвищим , де він буде конкурувати з системними процесами.
Не призупиняйте це, інакше на вас можуть бути призупинені інші речі!


Якщо ви використовуєте Провідник процесів Марка Русиновича , щоб переглянути пріоритети процесів, що працюють у вашій системі. Він показує наступні значення пріоритету та їх асоціацію.

24 Realtime
13 High         : procexp.exe itself is here, with winlogon, csrss
11              : smss is actually at 11
10 Above Normal :
 9              : lsass, services.exe are here
 8 Normal       : Most things are here
 6 Below Normal
 4 Idle

Ви можете використовувати провідник процесів і спробувати певну пріоритетність для Excel .
Перемістіть його вище 8 , але не виходьте за межі 12
Вище Нормального на 10 повинно зробити, я очікую.

З тієї ж лінії, якщо ви вважаєте, що деякий процес займає занадто багато часу для процесора, не перебуваючи у фокусі, ви можете знизити його пріоритет аж до режиму очікування .
Зазвичай я використовую для цього цю техніку.


Але пріоритет все одно знизиться, коли Excel не буде зосереджений, чи не так? ... просто на дещо вищий рівень пріоритетності, ніж раніше, я думаю. Чи знаєте ви, як підтримувати пріоритет потоку послідовним незалежно від фокусу вікна?
Джо Шмое

Я amшукаю цю деталь, але я розумію, що вікно у фокусі, як правило, є Normalпріоритетним (за замовчуванням), і як тільки ви перейдете Excelдо Above Normalпріоритету, воно має працювати з більш високим пріоритетом, ніж орієнтоване вікно. Але, з нижчим пріоритетом, система обробляє - саме там ви хочете.
nik

Якщо я не розумію те, що ви говорите, ваше значення полягає в тому, що ви можете підвищити пріоритет процесу Excel, і він буде залишатися таким пріоритетним весь час. Але широко використовуючи Excel, я можу з певною впевненістю сказати, що це не робить. За дизайном, здається, що він знижує власний пріоритет, коли вікно Excel не має фокусу. Якщо встановити більш високий пріоритет для процесу Excel, це не зупиняє цього - воно надає Excel пріоритетніший процес лише тоді, коли він має фокус, але він все ще різко засихає, коли втрачає фокус. Тільки проведіть тест, щоб підтвердити це.
Джо Шмое

Я здивований. Хоча я не використовував цю методику для підвищення пріоритетів процесу (лише для їх зниження).
nik

Я додав ще трохи інформації до питання, щоб висвітлити це навмисне зниження процесу, яке, здається, триває. В ідеалі, існує якийсь злом реєстру, який зупинить це.
Джо Шмое

3

Тут слід врахувати кілька різних речей: Коли ви змінюєте пріоритет процесу, цей базовий пріоритет успадковується всіма потоками та іншими процесами, які він починає. Поточний пріоритет складається з базового пріоритету та ряду факторів, які визначають, чи варто його збільшувати чи ні - перебуваючи на передньому плані, саме по собі не обов'язково збільшувати пріоритет, але такі речі, як вихід із стану очікування або виконання певного вводу-виводу дати короткий тимчасовий поштовх

Я б припустив, що запуск вашого Excel з високим пріоритетом під час роботи над цими дуже інтенсивними робочими книгами може мати сенс, і я б сказав, що другий ярлик під назвою "Високий пріоритет Excel" може бути хорошим способом зробити це. Спочатку створіть однорядковий пакетний файл, який виконує команду start за допомогою відповідних комутаторів, наприклад:

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 десь зручно - можливо, папку Office, або папку ac: \ scriptpts або щось, або домашню папку, щоб це могло блукати з машини на машину. Створіть новий ярлик, який вказує на цей файл, зробіть пускову папку папкою, в якій зберігається файл. Виберіть піктограму для файлу - перейдіть до виконуваного файлу 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 деякі дискові IO є більш важливими факторами їх швидкості, тому чи отримують вони передбачуваний підсилення чи ні, вплив на видиму ефективність, ймовірно, нижче того, що ви можете побачити простим спостереженням.


1
BasicallyMoney.com показує, як змінити параметри квантових правил через XP gui, але виправлення ключа реєстру все одно те саме для ОС від NT4 до Windows 7, тому більш загальним. Налаштування "Фонові послуги" те саме, що налаштування "фіксовано". І зауважте, це не є пріоритетним збільшенням, воно змінює тривалість "часового фрагмента" кожного процесу. Пріоритет - незалежна власність, а не підсилюється тим, що перебуває на передньому плані.
AdamV

1

Немає проблем із збільшенням пріоритету процесу на "вище нормального" або "високого", просто не встановлюйте його на "реальний час". Не можу допомогти вам у Excel, особливо вибачте.


1

Можливо, що маніпуляцію з пріоритетом проводить не Excel, а сама Windows. У Windows є механізм, де збільшується пріоритет процесів із вікнами на передньому плані ; тому, коли Excel втрачає фокус, його пріоритет повертається до нормального (який трохи нижче).

Єдиною сторінкою MSDN, яку я міг знайти про це за допомогою швидкого пошуку, є пріоритетні підсилення :

Коли процес, який використовується NORMAL_PRIORITY_CLASS, виведений на перший план, планувальник збільшує клас пріоритетів процесу, пов'язаний з вікном переднього плану, так що він є більшим або рівним класу пріоритетів будь-яких фонових процесів. Клас пріоритету повертається до початкових параметрів, коли процес вже не на першому плані.

З того, що я чув, є способи відключити цей пріоритетний приріст.


Я не впевнений у цьому. Якби це було тоді, я б очікував, що інші програми помітно сповільнюватимуться, коли вони не будуть зосереджені. Але я не помічаю жодного сповільнення, скажімо, Outlook, якщо він синхронізує електронні листи, коли фокус знаходиться на веб-браузері, або навіть уповільнення завантаження сторінки в моєму браузері, якщо я зосереджений на вікні Excel.
Джо Шмое

1
А кількість кронштейнів, таких як завдання BOINC, виконуються з низьким пріоритетом у фоновому режимі, але в повній мірі користуються наявними запасними можливостями CPU.
Алістер Стук

Ця сторінка MSDN описує стару, навіть стародавню поведінку.
Джеймі Ханрахан

0

Просто спробуйте це, у мене це спрацювало.

Не дуже приємний спосіб, але насправді це просто подвоїло швидкість мого розрахунку! Дивовижний! (але я перевірю результати, не впевнений у них ...)

Ваша форма користувача повинна бути в центрі екрана в 1024 * 768. Він просто надсилає програмним забезпеченням правою кнопкою миші на форму користувача.

Повний розрахунок, але не використовуйте комп'ютер під час його обчислення (запускайте інші програми, вікна ..).

Просто спробуйте і скажіть мені, як це працювало на вас!

'In General
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal Y As Long) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
Private Const MOUSEEVENTF_RIGHTUP As Long = &H10

Private Sub Optimizer()
    'activate the window
    'AppActivate "Inbox - Microsoft Outlook"
    'move the cursor where you need it, I guessed at 200,200
    'Warning here : check the center coordinates of your userform!
    SetCursorPos 512, 374
    'send a down event
    mouse_event MOUSEEVENTF_RIGHTDOWN, 0&, 0&, 0&, 0&
    'and an up
    mouse_event MOUSEEVENTF_RIGHTUP, 0&, 0&, 0&, 0&
End Sub

'Inside your code
Call Optimiser`

0

Після довгої ночі розрахунку повної швидкості та після перевірки результати цього ранку були ... абсолютно помилковими.

Тож я вважаю, що це просто помилка, розрахунки виконані неправильно.

Натискання на форму користувача у розрахунку просто прискорює швидкість процесу, але не повністю перераховує аркуш за його межами. Я точно сказав, що я був у режимі реального часу з пріоритетом.

Ще одна приємна річ - налаштувати завдання на процес за допомогою prio_x64_199_2367.exe, http://softziz.com/2010/11/prio-64-bit-1-9-9/

Це збереже пріоритет процесу, визначений CTRL ALT DEL, всередині диспетчера завдань, для подальшого використання.

З повагою,

Джон

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.