Вопрос: Улучшение производительности Excel


У меня есть 8-процессорная 3GHz-машина Windows, которая, по оценкам, завершит вычисление с использованием Excel за 16 дней на основе выборочного теста данных. Эта работа неприемлема (!).

Расчет не использует возможности Excel, но в основном представляет собой скрипт VBA, вызывающий объект COM, который имеет функцию калькулятора.

В Процессе калькулятора используется 25% процессор, а Excel использует 1%. Смена памяти, похоже, не используется. Поскольку процесс считывает и записывает в текстовые файлы, я предполагаю, что он связан с I / O. Счетчики чтения / записи ввода / вывода постоянно подсчитываются во время расчета.

Установлена ​​проверка вирусов, но она не проверяется активно. то есть процессор составляет 0% в течение периода расчета.

Лучшее предложение до сих пор - использовать RAM-диск.

Не могли бы вы предложить какие-либо другие способы исследования узкого места производительности?

[Позже...]

Большое спасибо за совет ниже. В основном процесс калькуляции, является специализированным финансовым калькулятором, но, как упоминалось ниже, похоже, что узкое место использует его через COM. Этот метод удаляет все многопоточные функции, предлагаемые калькулятором, которые также могут быть адресованы как веб-служба.

Сценарий реального мира, который задействован, - это обновление за три года финансового стола с использованием этого нового калькулятора. К сожалению, недостаточно времени было зарезервировано достаточно рано в расписании для оценки эффективности, что привело к срочности расследования проблемы производительности. Поскольку этот расчет не выполняется на регулярной основе, нет необходимости настраивать среду, оптимизированную для скорости.

Правильное решение для утилизации Excel и написания многопоточного диспетчера в Calcualtor очевидно, но в настоящее время мы ищем какое-то обходное решение, которое мы получаем за расчеты за разумное время.


3
2018-01-15 05:23


Источник


Увеличило бы Приоритет вовлеченных процессов (скажем, через диспетчер задач)? - Matthew Lock


Ответы:


Вы используете 25% процессора, потому что COM-объект однопоточный и не использует другие ядра вашего процессора. Вы не можете увеличить производительность своих вычислений без изменения COM-кода COM.

Сожалею.


4
2018-01-15 07:40



Помогло бы оно создать несколько экземпляров COM-объекта и / или Excel и надеяться, что система планирует его через несколько процессоров? - Matthew Lock
I набор данных можно разделить между разными экземплярами, в которых он будет работать. - Ignacio Soler Garcia
@Matthew: Если вы собираетесь это сделать, я думаю, вам лучше изучить другие решения, такие как правильная среда программирования / расчетов (например, предложенная Вил) - Josh Hunt
@joshhnut: stuart говорит, что движок Excel (на самом деле движок VBA) вызывает только COM-объект, поэтому движок, используемый для выполнения вызова, довольно неуместен, потому что вычисления выполняются COM-объектом. Имейте в виду, что VBA и VB6 имеют более или менее одинаковый движок. - Ignacio Soler Garcia


Проще говоря, не используйте Excel для такого рода вещей. Вы можете посмотреть на Службы Excel (надстройка к SharePoint), которая предназначена для обработки при загрузке, однако у меня нет опыта с ней.

Если вы делаете что-то сложное, вы действительно хотите изучить серьезные математические инструменты, которые могут масштабироваться для многопроцессорных сред. Однако я даже не знаю, с чего начать, не зная, чего вы пытаетесь выполнить.

Некоторые вещи, на которые нужно обратить внимание, включают SageMath, MATLAB а также Mathematica, среди МНОГИЕ другие.


9
2018-01-15 05:30



+1 Matlab - отличный инструмент, но также возможно, что многие языки программирования общего назначения также будут подходящими (и бесплатными для использования). Кроме того, вероятно, много процессорного времени здесь просто Excel, освежающий то, что показано на экране после каждого шага. - sblair
@sblair не может согласиться больше. Первое, что пришло в голову, - это интерактивная оболочка Python, когда я увидел этот вопрос на самом деле. - John T


Одно дело - найти лучший способ реализовать свое программное обеспечение, используя инструменты, более подходящие для вычислений производительности, или даже язык / структуру, специфичную для вашей проблемной области. Многие инструменты существуют там, например Mathematica, SAS, R, и так далее. Кроме того, вы должны распараллелить его как можно больше.

Кроме того, избегайте использования диска в максимально возможной степени. Если вы собираетесь использовать диск, помимо RAM-дисков, вы должны использовать высокопроизводительный RAID-массив, такой как RAID 10, или даже лучше RAID 10, состоящий из SSD.

Вы должны просмотреть свой процесс во время его запуска и посмотреть, сколько стоит системное время и сколько времени пользователя. Я готов поспорить, что большая часть времени выполнения занимает системные вызовы для выполнения всех операций ввода-вывода на диске. Избавиться от этого.


4
2018-01-15 05:29





Вам просто нужен диспетчер задач:

Перейдите на вкладку «Процессы», затем выберите «Просмотр / Выбор столбцов» и проверьте все или все:

  • Использование ЦП (дает процент от общего количества Используемый процессор)
  • Память - рабочий набор (используется память)
  • Чтение i / O + запись ввода / вывода (общее количество отсчетов количество обращений к диску)

Затем вы можете дважды щелкнуть дважды (не дважды щелчком) по столбцу, чтобы отсортировать его в порядке убывания значений, чтобы проверить чрезмерное использование.

Однако, если проблема в объекте ActiveX, оптимизация Excel не поможет вообще.


0
2018-01-15 07:09





Как упоминалось в других публикациях, вы должны исследовать перенос обработки с Excel. Объекты VBA и COM неэффективны при выполнении множества операций back-and-forth.

Лично я хотел бы отправить свои данные на SQL-сервер и написать там запрос. Ваш запрос / процедура может выполнять свои вычисления и предоставлять вывод в Excel с помощью внешнего подключения.

Решения RDBMS довольно эффективны при выполнении тех задач, которые я никогда не мечтал бы сделать в Excel или VBA, легко работая с базами данных с несколькими ГБ и с таким количеством потоков, с которыми вы можете справиться.


0
2018-01-16 23:49