Ограничить использование ЦП Excel

31

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

Моя ОС - Windows 7 Enterprise 64-bit, а версия Excel - 2007-32 bit

learningAsIGo
источник
1
Окна? Какая версия?
DavidPostill
Windows 7. Я добавлю это к посту
learningAsIGo
8
Получить многоядерный процессор? Если у вас уже есть одно (а кто нет?), А Excel использует все ядра (что я не знал, что Excel может сделать), то установите его сходство в диспетчере задач.
user253751
2
Это не отвечает на вопрос, но убедитесь, что вы отключили обновления окна, прежде чем начать вычислять и обновлять тысячи ячеек. Если у вас есть какие-либо графики, отключите их тоже. VBA медленный, но когда он действительно медленный, то обычно виноват один или оба.
Кокси
1
@cat: Нет, 100% загрузка ЦП в диспетчере задач Windows означает 100% для всех логических процессоров. Если заполнено только одно ядро, оно будет либо 25% (на обычном двухъядерном процессоре с гиперпоточностью), либо ~ 36% (турбонаддув).
Мартин Кахья Пауло

Ответы:

54

Если функция VBA вызывается из нескольких формул или если ваш сценарий генерирует или форсирует пересчет нескольких формул, то в этом случае обязательно должна использоваться функция многопоточных вычислений Excel. Соответственно, это будет либо запускать несколько экземпляров вашей функции VBA для каждой формулы, либо пересчитывать несколько ячеек одновременно, пока ваш скрипт vba работает в одном потоке.

Вы можете ограничить количество потоков, используемых Excel для пересчета формул, в разделе «Параметры Excel ... вкладка« Дополнительно »... раздел« Формулы ».

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

MTONE
источник
Саб VBA не проблема, это формула массива Excel, которую генерирует код VBA.
learningAsIGo
@learningAsIGo Правильно, я упростил свой ответ. Дайте нам знать, помогает ли установка количества потоков в 1.
mtone
1
Это, кажется, добилось цели. Я установил его на 3 ядра, и он достигает 75% процессорного времени, оставляя мне достаточно места для других дел. Благодарность!
изучение
27

Вместо понижения приоритета, попробуйте изменить сходство в диспетчере задач. Если у вас более 1 процессора, вы можете ограничить количество процессоров, которые Excel будет использовать. Это освободит другие процессоры для работы над другими вещами.

Щелкните правой кнопкой мыши Excel на вкладке «Процессы» и выберите «Установить сходство». Выберите ЦП, где вы хотите, чтобы Excel работал.

B540Glenn
источник
3
Обратите внимание, что для соответствия Windows считает каждое ядро ​​процессором. (Так что это будет работать, если у вас двойное или четырехъядерное ядро.)
jpmc26
1
Ну, если говорить конкретно о ядрах, то почему не темы HyperThreading? Они также являются различными логическими процессорами. Т.е. четырехъядерный процессор с HT будет иметь 8 логических процессоров.
Руслан
Я делаю это все время, когда запускаю HandBrake, и просто хочу в течение часа просматривать Интернет, не останавливая и не останавливая процесс транскодирования. Я думаю, что стоит упомянуть, что через некоторое время ядра возвращаются в программу, и сходство «сбрасывается», по крайней мере, это происходит со мной при ручном тормозе.
MonkeyZeus
2
@MonkeyZeus Обычно сходство не сохраняется при выходе из процесса. Это относится только к процессу, запущенному в данный момент. Может быть, HandBrake сам порождает новые процессы, или вы запускаете новые.
jpmc26
@ jpmc26 Полезно знать! Я определенно не запустил новый процесс сам, поэтому он должен порождать его самостоятельно.
MonkeyZeus
7

Вы можете попытаться снизить приоритет процесса Excel, открыв диспетчер задач, перейдя на вкладку «Подробности» или «Процессы» (в зависимости от версии Windows), щелкнув правой кнопкой мыши по процессу Excel.exe и выбрав более низкий приоритет Это должно дать больше процессорного времени другим процессам.

Slithy Toves
источник
1
Кажется, не работает: я установил приоритет на очень низкий, и он все еще отстает от компьютера.
learningAsIGo
1
Может быть, попытаться увеличить приоритет вашего веб-браузера, или что вы пытаетесь сделать в то же время, а? Я нашел эту дискуссию о том, насколько эффективно меняются приоритеты .
Slithy Toves
3
@SlithyToves: это действительно не должно иметь значения. Приоритет определяет, какая программа получает процессор, если есть несколько кандидатов. Установка Excel в очень низкое значение означает, что он получит срез процессора только после завершения всех других программ. Тем не менее, когда Excel делает получить кусок процессора, он не будет отказаться от этого среза. Он просто проиграет соревнование за следующий интервал времени процессора.
MSalters
3

Есть функции Sleep и Wait, доступные в VBA или через объявление. Однако «чрезмерно упрощенное правило большого пальца» состоит в том, чтобы никогда не использовать Sleep (). (Google "Никогда не используйте sleep ()" Программирование ")

Страница документа для Application.Wait ( https://msdn.microsoft.com/en-us/library/office/ff822851.aspx ). Обратите внимание, что режим «Сон и ожидание» приведет к тому, что Excel перестанет отвечать на запросы в течение указанного вами времени, и это может привести к «срыву поезда».

Если в ваших вычислениях используется какой-то цикл, то один из способов справиться с этим для вашей конкретной цели (лишиться времени вычисления для доступности ЦП) состоит в том, чтобы создать специальную собственную функцию ожидания, которая, например, циклически повторяет DoEvents () в течение 1 секунды и затем возвращается.

DoEvents в основном говорит вашему коду / интерпретатору отказаться от времени для ОС и т. Д. Это определенно заставит ваш код занять больше времени. Это также может позволить вам редактировать рабочий лист во время расчета, поэтому ваш пробег может варьироваться. Тест.

См., Например, /programming/469347/is-there-an-equivalent-to-thread-sleep-in-vba

Йорик
источник
0

У меня была такая же проблема, когда у моего ноутбука было 4 ГБ памяти. Как только я получил обновление до 16 ГБ, проблема прекратилась. Просто еще одно возможное решение.

RPh_Coder
источник
0

Добавьте следующие 2 строки где-то в начале макроса:

'Turn off screen updating

 Application.ScreenUpdating = False

И эти 2 строки в конце:

'Turn screen updating back on

 Application.ScreenUpdating = True

Тогда у вас будет меньше работы, пока вы будете заниматься чем-то другим.

свисающий
источник
-2

Если вы используете 32-битный офис в 64-битной ОС, вы должны использовать это приложение: http://www.ntcore.com/4gb_patch.php

Это приложение позволит Excel или любой другой офис 32bit использовать Мо

diasje
источник
Вопрос об ограничении использования процессора, ваш ответ - об активации AWE в приложениях, которые, вероятно, даже не будут использовать преимущества AWE.
Мартин Кахья Пауло
-5

Используйте OpenOffice или LibreOffice: его возможности сценариев гораздо эффективнее, чем у MS, и вы можете буквально иметь «газ» в своих вычислениях.

РЕДАКТИРОВАТЬ: Почему downvote? взгляните на руководство и убедитесь сами. Вы можете конвертировать ваши расчеты в Java и быть просто отлично со всей дроссельной силой JVM, например.

Алексей Веснин
источник
3
Я не понизил голос, но я предполагаю, что это потому, что вы предложили обходной путь вместо решения очень прямого вопроса, заданного в ОП: «Есть ли способ ограничить доступ к процессору в Excel при работе? "
Monkpit
@Monkpit Моя история с OpenOffice началась с аналогичной проблемы, для всех документов, которые у нас были, портирование заняло примерно неделю, но после этого я решил, что никогда больше не буду использовать MS Office.
Алексей Веснин
OpenOffice значительно превосходит Office по той причине, что 99% людей будут использовать Office над Libre, поэтому разработчики (вероятно, как этот парень). Вот почему я проголосовал.
Томас Шера
@ThomasShera Ну, я вообще не могу понять - почему в течение таких долгих лет парни из Microsoft не могут просто исправить вещи ? Нет, ничего нового не нужно, никаких дополнений - просто сделайте ваш продукт реально работающим ...
Алексей Веснин