Обмежити використання процесора Excel


31

Чи є спосіб обмежити, на скільки Excel має доступ до використання процесора під час роботи? У мене є сценарій VBA, який обчислює купу гігантських формул масиву. Весь розрахунок займає, можливо, 20 хвилин, використовуючи 100% мого процесора, але я не можу використовувати свою машину протягом часу, і я б швидше працював у фоновому режимі, як 50% використання процесора, щоб я міг продовжувати робити інші речі. Будь-які пропозиції?

Моя ОС - це 64-розрядна версія Windows 7 Enterprise, а версія Excel - 2007-32 біт


1
Windows? Яка версія?
DavidPostill

Windows 7. Я додам його до посади
learningAsIG

8
Отримати багатоядерний процесор? Якщо у вас вже є такий (хто ні?) І Excel використовує всі ядра (що я не знав, що може зробити Excel), то встановіть його спорідненість у диспетчері завдань.
користувач253751

2
Це не відповідає на запитання, але переконайтесь, що вимкніть оновлення вікон, перш ніж розпочати обчислення та оновлення тисяч комірок. Якщо у вас є якісь діаграми, тоді також вимкніть їх. VBA повільний, але коли він справді повільний, то, як правило, один або обидва винні.
Coxy

1
@cat: Ні, використання 100% процесора в Windows Task Manager означає 100% для всіх логічних процесорів. Якщо заповнене лише одне ядро, воно становитиме або 25% (на загальному подвійному ядрі з гіпер-різьбленням), або ~ 36% (турбо-прискорення).
Martheen Cahya Paulo

Відповіді:


54

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

Ви можете обмежити кількість потоків, які Excel використовує для перерахунку формул в параметрах Excel ... Вкладка "Додаткові" ... Розділ формул.

введіть тут опис зображення


Підкабеля VBA не є проблемою, це формула масиву excel, яку генерує код VBA.
навчанняAsIGo

@learningAsIGДобре, я спростив свою відповідь. Повідомте, чи допоможе встановлення кількості потоків у 1.
mtone

1
Це, здається, зробило трюк. Я встановив його на 3 ядра, і це максимум на 75% процесора, залишаючи мені достатньо місця для інших дій. Спасибі!
навчанняAsIGо

27

Замість зниження пріоритету спробуйте змінити спорідненість у Диспетчері завдань. Якщо у вас більше 1 процесора, ви можете обмежити кількість процесорів, якими користуватиметься Excel. Це звільнить інші процесори працювати над іншими речами.

Клацніть правою кнопкою миші Excel на вкладці «Процеси» та виберіть «Встановити прихильність». Виберіть процесори, де ви хочете працювати Excel.


3
Зауважте, що для спорідненості Windows також розглядає кожний основний процесор. (Отже, це спрацює, якщо у вас є подвійне або чотирьохядерне ядро.)
jpmc26

1
Ну якщо говорити спеціально про сердечники, чому б не нитки HyperThreading? Вони також є різними логічними процесорами. Тобто чотирьохядерний процесор з HT матиме 8 логічних процесорів.
Руслан

Я роблю це весь час, коли запускаю HandBrake і просто хочу протягом години переглядати Інтернет, не зупиняючи і не зупиняючи процес перекодування. Я думаю, варто було б згадати, що через деякий час ядра все-таки звільняються до програми, і спорідненість «скидається», принаймні, це трапляється зі мною ручним гальмом.
MonkeyZeus

2
@MonkeyZeus Зазвичай спорідненість не зберігається, коли процес закінчується. Це стосується лише запущеного процесу. Можливо, HandBrake породжує нові процеси сам або ви починаєте нові.
jpmc26

@ jpmc26 Приємно знати! Я точно не почав новий процес сам, тому його потрібно нерестувати самостійно.
MonkeyZeus

7

Ви можете спробувати знизити пріоритет процесу excel, відкривши диспетчер завдань, перейти на вкладку "Деталі" або "Процеси" (залежно від версії Windows), клацнувши правою кнопкою миші на процесі excel.exe та вибравши нижчий пріоритет. Це повинно дати більше процесорного часу для інших процесів.


1
Схоже, це не працює: я встановив пріоритет дуже низьким, і він все ще відстає від комп'ютера.
навчанняAsIGo

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

3
@SlithyToves: Це дійсно не має значення. Пріоритет визначає, яка програма отримує ЦП, якщо є кілька кандидатів. Якщо встановити Excel дуже низьким, це означає, що він отримує фрагмент CPU лише тоді, коли всі інші програми виконані. Тим НЕ менше, коли Excel робить отримати шматок процесора, він не буде відмовитися від цього зрізу. Це просто програє конкуренцію за наступний відрізок часу процесора.
MSalters

3

Існують функції сну та очікування, доступні в VBA або через декларацію. Однак "надмірно спрощене правило" ніколи не використовувати режим сну (). (google "" ніколи не використовуй сну () "програмування")

Сторінка Doc для Application.Wait ( https://msdn.microsoft.com/en-us/library/office/ff822851.aspx ). Зауважте, що режим "Сон і очікування" призведе до того, що Excel стане невідповідним протягом вказаної вами тривалості, і це може спричинити за собою часовий відріз "аварії поїздів".

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

DoEvents в основному каже вашому коду / інтерпретатору відмовитися від часу на ОС тощо. Це, безумовно, призведе до того, що ваш код зайнятиме більше часу. Це також може дозволити вам редагувати робочий аркуш під час розрахунку, тому ваш пробіг може змінюватися. Тест.

Дивіться, наприклад, https://stackoverflow.com/questions/469347/is-there-an-equivalent-to-thread-sleep-in-vba



0

У мене була така ж проблема, коли мій ноутбук мав 4 Гб пам'яті. Як тільки я оновив її до 16 Гб, проблема припинилася. Просто ще одне можливе рішення.


0

Додайте наступні 2 рядки десь біля початку макросу:

'Turn off screen updating

 Application.ScreenUpdating = False

І ці 2 рядки наприкінці:

'Turn screen updating back on

 Application.ScreenUpdating = True

Тоді у вас буде менше роботи, поки ви робите щось інше.


-2

Якщо ви використовуєте офіс 32bi в 64-бітовій ОС, ви повинні використовувати цей додаток: http://www.ntcore.com/4gb_patch.php

Цей додаток дозволить програмі Excel або будь-якому іншому офісному 32-бітному користуватися mo


Питання стосується обмеження процесора, ваша відповідь - про активацію AWE у додатках, які, ймовірно, навіть не скористаються AWE.
Martheen Cahya Paulo

-5

Використовуйте OpenOffice або LibreOffice: його сценарій потужність набагато ефективніша, ніж MS, і ви можете буквально мати "дросель" у своїх обчисленнях.

EDIT: Чому зворотний рух? подивіться посібник і переконайтеся самі. Ви можете конвертувати свої обчислення в Java і бути просто чудовими, наприклад, усією потужністю дроселювання JVM.


3
Я не заявив, але я припускаю, що ви запропонували рішення замість вирішення прямого запитання в ОП: "Чи є спосіб обмежити, наскільки Excel має доступ до роботи під час роботи? "
Monkpit

@Monkpit моя історія з OpenOffice почалася з подібної проблеми, перенесення займало приблизно тиждень для всіх документів, які ми мали, але після цього я висловив думку, що більше ніколи не буду використовувати MS Office.
Олексій Веснін

OpenOffice дуже перевершує Office через те, що 99% людей будуть використовувати Office над Libre, тому розробники (напевно, як цей хлопець). Ось чому я виступав проти.
Томас Шера

@ThomasShera Ну, я взагалі не можу зрозуміти - чому такі довгі роки хлопці Microsoft не можуть просто виправити речі ? Ні, не потрібні нові речі, ніякі доповнення - просто зробіть ваш продукт справді справним ...
Олексій Веснін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.