Страницы: 1 2 След.
RSS
Макрос для регулирования нагрузки процессора
 
Уважаемые коллеги, профессионалы
Есть такого рода задача.
Существует файл, в который с помощью формул выводится информация более чем из 30 других файлов. (Так называемых стоп файлов)
В свою очередь в эти 30 файлов с помощью формул выводятся значения с аналогичных файлов динамических файлов, в которых часть значений обновляется, а часть нет.
Соответственно по статическим значениями и переноситься информация

В большом файле есть макрос который открывает стоп файлы и пересчитывает формулы, то есть обновляет связи с динамическими файлами.

Суть проблемы в том, что количество подключённых файлов растёт, и вот перешагнув количество в 30 штук, комп уже начал, мягко говоря немного кашлять.

Поиск решения проблемы.
Нет ли у кого ни будь макроса, с помощью которого общую нагрузку на процессор, исходя из задач на пересчет, можно было бы разделить на очередь небольшими, так сказать "печечками" и произвести спокойно пересчет?
То есть сделать тоже самое, что и делается сейчас, но порционно, даже если это займёт больше времени. А что касаемо времени было бы неплохо видеть кол порций и примерное время в каком ни будь прогресс баре.

Заранее благодарен за помощь
Изменено: Hopsright - 24.07.2014 16:16:00
 
нельзя ли часть обработки данных перенести в Access, а не сложных расчетов оставить в Excel?
 
Access два раза в жизни запускал
 
С  Acess  к сожалению ничего не получиться.
Помогите пожалуйста решить вопрос макроссом
Заранее благодарен
 
да запросто во
1) добавь в цикл обработки - визуализацию процесса, любую (есть готовые варианты), для того чтобы видно было процент и процесс и можно было отменить, а не казалось что "зависло"
2)в процесс обработки добавь Паузы Wait`ы и подбери нужую задержку для уменьшения нагрузки
3)Посмотри темы про оптимизацию, уверен что очень много чего можно оптимизировать, не только отключая визуализациии всякие и рюшечки, к примеру все нужно переносить на оперативку и вычислять сначало в памяти, для  этого создавай переменные и записуй сначало в них указатели, а лучше данные - потом производи с переменными уже все процессы, а потом приравняй таблицу к переменным. (надеюсь понятно изложил)
И вуаля

П.С. Найди места самые трудоемкие - для этого есть в инете мого тоже разных процедур и функций и выведи эту часть на форум, а мы посмотрим.
Изменено: Иван - 25.07.2014 00:30:08
Автоматизация приложений, разработка ботов, парсинг сайтов, поиск информации и многое другое на языках : Delphi, C++, VBA. Информация в профиле.
 
Очень понятно
Руки ровные, осталось выучить VBA и вуаля.
Нет готовых решений случайно, уверен что много кто с таким сталкивался

Заранее благодарен
 
Цитата
Hopsright пишет:
Существует файл, в который с помощью формул
Уходить от формул к макросам
 
Цитата
Hopsright пишет:
Нет готовых решений случайно, уверен что много кто с таким сталкивался
решений по поводу чего?  Паузы т.е. задержки? - или визуализации?
http  :/  /excelvba.ru/tools/ProgressIndicator - то что я пользуюсь

задержка на 400 мс
Код
Dim t0 As Single
t0 = Timer
Do While Timer - t0 < 0.4
  DoEvents
Loop 

Ну и конечно то что выше написали вам, переведите просто все ваши формулы на макросы и все или сделайтеиз формул функции и используйте как формулу (менее рентабельно)
Изменено: Иван - 25.07.2014 01:35:28
Автоматизация приложений, разработка ботов, парсинг сайтов, поиск информации и многое другое на языках : Delphi, C++, VBA. Информация в профиле.
 
И все таки уважаемые специалисты, хотел бы попросить помощи в реализации кода макроса, который запускался бы вместе с открытием книги и ограничивал нагрузку процессора при расчетах в данной книге,к примеру максимум на 70%
Заранее благодарен за помощь
 
Похоже
Изменено: RAN - 04.08.2014 15:04:29
 
Да согласен, но там решение задачи до регулировки нагрузки процессора не дошли
 
Как я вижу - просто поставить doevents в циклы, и можно будет на машине работать, пока макрос гоняет файлы.
Или проблема в чём-то другом?
 
Нужно не "регулировать" нагрузку, а уходить от формул))
 
Подскажите, каким образом я могу перегнать формулы в макросы? Я совсем не знаю VBA, или может есть какой нибудь конвертер?
Также, по моему где то встречал, обсуждение того, что VBA использует только одно ядро, сколько бы их не было на ПК.
На самом деле, если бы можно было задать максимально допустимую нагрузку на процессор с помощью макроса, то было бы замечательно.

Заранее благодарен
 
Нет такого конвертера)) Нужно писать обработку (вычисления) для конкретного случая. По поводу только одного ядра - не слышал такого.
 
Цитата
Юрий М пишет: По поводу только одного ядра - не слышал такого.
Котяра, уши мыть надо.  :)  
Неоднократно обсуждалось. (в т.ч. и здесь)
 
А чё сразу уши? Не было меня в тот момент - рыбу ел...
 
Примеры цепочки файлов (только сокращённый вариант) покажите, может найдутся желающие (умеющие) помочь.
 
Тут вопрос в чем: да, VBA не может использовать два процессора, в то время как формулы способны использовать преимущества многоядерного процессора по полной. Однако весь вопрос в том, что есть вероятность того, что перенос на VBA значительно ускорит процесс вычислений и регулировка нагрузки будет не нужна. Что же касаемо самой регулировки нагрузки - это нереально, т.к. VBA придется опрашивать процессор с определенной частотой. А это опять же процедура, которая должна будет выполнится в определенный момент. Замкнутый круг. Хотя по сути DoEvents как раз и выполняет в какой-то степени регулировку - данный оператор просто передает на время управление процессами ОС(чтобы та могла завершить задачи в очереди), что позволяет и другие процессы параллельно совершать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Hugo пишет:
Как я вижу - просто поставить doevents в циклы, и можно будет на машине работать, пока макрос гоняет файлы.
doevents поможет с макросом. А как doevents поможет при пересчете листа?
Сейчас попробовал файлик (~ 500000 Суммеслимн). Загрузка процессора 98%. При пересчете 1/20 части загрузка процессора 98%. Смысл пересчитывать порционно?
А если и тут куча книг, полных СУММПРОИЗВ, или аналогичного, а то и похлеще?
Бедный комп...

Поскольку у меня задача была разовая, и я и не парился. Один (десять) раз можно и по 5 минут подождать.  
Изменено: RAN - 04.08.2014 22:49:00
 
А пересчёт разве мешает делать что-то другое?
И кстати я так и не понял, что такое - "кашляет комп", и какая вообще глобальная проблема?
 
Кому как, а на моем двухядернике с 2Г памяти, при таком пересчете не поработаешь.
 
Ну а если поставить низкий приоритет процессу?
 
Проще просто в параметрах Excel указать, что использовать надо всего одно ядро(Файл-Параметры-Дополнительно-раздел Формулы-Включить многопоточные вычисления-Вручную - 1).
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Такой вариант не подходит, есть возможность распределять нагрузку на ядра в реальном времени с помощью программы CPU-Control, но если даже 1 ядро загружено на 100% комп начинает лагать, потому нужно решить задачу таким образом, что бы ограничить нагрузку до 70%, будь то 1, или 4 ядра.
Заранее благодарен
 
В общем решил вопрос с помощью стороннего софта.
Все спасибо за помощь.

Ссылка на программку: http://www.ex.ua/923858020139
 
Так это не то же самое, как снизить вручную приоритет? Вручную ведь проще.
 
Нет, это вовсе не то. Там есть бегунок для каждого процесса
 
А по сути? Чем 6 стандартных ступеней не бегунок?
В результате есть разница что использовать?
 
У меня при смене приоритета нагрузка на процессор остается 100%
Страницы: 1 2 След.
Наверх