Добрый день! Интересует, какие комплектующие ПК влеяют на скорость обработки данных в Таблице? Нужны только достоверные данные, т.к. нужно докупить (заменить) в компьютере именно то, что 100% повлияет на скорость обработки данных.
Суть проблемы - есть екселевский файл весом 60-70мб (в зависимости от заполненных данных). В нём находиться огромнейшее кол-во сложнейших вычислений. Проблемы: 1) Загрузка и сохранение занимает около 1.5 минут! 2) Каждое действие, будь то просто написание текста или внесение/изменение любых данных, приводит к 100% загрузке процессора (т.е. перед тем как отобразить написанные/изменённые данные происходит обработка "процессоры (%)" (около 5-7 секунд).
Я пришёл к выводу, что скорее всего у меня проблемы с производительностью ПК. Что посоветуете?
Моё железо сейчас: Процессор Pentium 2 ядра Память 8Gb DDR3 HDD 5400rpm int.VGA
P.s. файл трогать нельзя! Он полностью рабочий (в нём никаких условных форматирований - только формулы) - нужно изменить только скорость обработки данных.
Я не верю, что производительность железа никак не влияет на скорость работы программы... Неужели если поставить к примеру 4х ядерный Core i5/i7 процессор, и 16Гб ОЗУ, это никак не повлияет на скорость обработки данных...!? Ведь не зря для работы с обычной программой 1C ставят сервер на Xeon процессоре (-рах). Ведь программа завязана на постоянной обработке и сопоставлении данных.
Я почитал описание программы Excel на офф сайте, и поразился тому, какой объём данных она может обрабатывать (моя таблица и на 2% не соответствует тому, что заявлено в мануале производительности программы), а по факту тормозит так, как будто забита формулами до предельных возможностей программы).
Поясню подробнее - мой файлик является своеобразным аналогом 1С-ки - т.е. при помощи формул воссоздан почти весь функционал программы 1С для конкретных задач. Вопрос стоит только в том, как ускорить обработку вводимых данных, чтобы не ждать по 5-7 секунд после каждого введённого значения!?
Есть понятие производительность ПК, а есть производительность самих исполняемых приложений. Если взять обычный 32-битный эксель - он не будет использовать эти 16ГБ оперативки которые вы поставите. Есть еще использвание графического ускорителя (видеокарта) - в экселе такой фишки еще нет (поправьте, если не прав - тут я сомневаюсь) - да и будет ли - непонятно.
Есть еще последовательность вычислений - ПК будет обрабатывать данные в файле ровно так как Вы напишите формулы. Еще производительность зависит от того куда обращается Excel при обработке данных. Если это какой-то файл в сети - скорость будет зависить так же от скорости сетевого соединения и "трафика" создаваемого в этой сети. Также эксель может отправлять запросы во внешние БД - тогда производительность будет зависить от "сети" а также производительности сервера той БД к которому обращается excel (и то какие расурсы выделены для этой БД на этом сервере).
Если в файле эксель много формул написанных "с запасом" (когда обращение идет не на выделенные диапазоны с данными - а на диапазон столбцов/строк). К тому же если формулы работающие с массивами (Агрегат), а также формулы массивов - тогда эксель будет работать медленно.
Вообще для комфортной работы эксель достаточно вот такой конфигурации: 1. Intel Pentium на базе чипа Core I5 (или аналогичной производительности Athlon) 2. Оперативная память 3-4 ГБ 3. Монитор на 21-22 дюйма 4. Скорость сети 100МБ
Еще следует помнить что эксель не должен использоваться как База Данных для каких-то серьезных проектов. В общем, без Вашего "медленного" файла и Ваших "ожиданий" от работы Excel тяжело что то говорить.
Простые способы ускорить работу эксель: 1. Отключить автоматический пересчет формул 2. Отключить "лишние" проверки в фоновом режиме ("красные", "зеленые" треугольники в углах ячеек) 3. Перенести данные из сетевых папок - локально (если проблема в сети) или же вообще организовать работу в одной книге в разных листах. 4. Убрать "промежуточные" вычисления. Т.е. если если какие-то доп строки/столбцы используются для получения каких-то значений для дальнейшего пересчета - изменить основную вычисляемую формулу таким образом чтобы не использовать доп строки/столбцы (Мега-формулы) 5. Убрать "лишнее" условное форматирование.
fakenomore17 написал: Т.е. если если какие-то доп строки/столбцы используются для получения каких-то значений для дальнейшего пересчета - изменить основную вычисляемую формулу таким образом чтобы не использовать доп строки/столбцы (Мега-формулы)
Странно. Я все жизнь считал , что десяток простых и быстрых формул будут работать быстрее, чем одна МЕГАформула. Неужели я ошибался?
Вполне такой нормальный кинжальчик. Процентов на 100
несмогу подобрать исключения - но возможно они есть, но в общем суть вот в чем: мегаформула считается один раз, промежуточные формулы пусть каждая, в отдельности, и легче - но считается отдельно. соответсвенно считается большее количество раз. Процессору посчитать сложную мегаформулу не намного сложнее чем простую.
условно говоря так: простая формула считается 75 нсек (промежуточных формул 2) мегаформула счиатеся 145 нсек каждая ячейка считается отдельно - соотвественно 75+75 = 150 а это больше чем 145.
п.с.: зависимость, конечно, не линейная - но она присутствует.
На СУБД переходите. Или хотя-бы на макросы. Меня всегда это радовало
Цитата
DivineSoul написал: файл трогать нельзя! Он полностью рабочий
. Особенно с восклицательным знаком. Открытие/закрытие по 1,5 мин и каждая операция по 5 сек для меня далеко не "рабочий" файл Какой, кстати, его объем? 70 Мб !
Ivan.kh,спасибо!!!! поживем еще абсолютно согласен с авторами (ссылка выше в посте Ivan.kh) я тут пару месяцев назад наваял формулу так символов в 300-350 где то за полчаса. Вчера два часа пытался переделать ее под новые реалии.плюнул написал новую.Теперь думаю что будет если босс снова решит условия поменять
китин написал: Я все жизнь считал , что десяток простых и быстрых формул будут работать быстрее, чем одна МЕГАформула.
Я тоже так считаю. Не вижу случая, когда мега-формула будет работать быстрее нескольких простых формул. Особенно это заметно, если в МЕГА-формуле используются массивы и таких формул много. Или в мега-формуле несколько раз пересчитывается один и тот же фрагмент.
По ускорению - если есть возможность по объёму данных - используйте 2003 офис; затем - 2010. 2013 и 2016 заметно медленнее 2010. Во всяком случае на слабом железе. Видео-карта на скорость влияет, особенно в последних версиях (2013; 2016) Память; ну, только если объем данных большой, если много формул массива и сами массивы в формулах большие. Процессор конечно. Материнка (чипсет) тоже. Попутный софт (что еще кроме офиса установлено и запущенно).
Михаил С. написал: По ускорению - если есть возможность по объёму данных - используйте 2003 офис; затем - 2010. 2013 и 2016 заметно медленнее 2010. Во всяком случае на слабом железе. ... Память; ну, только если объем данных большой, если много формул массива и сами массивы в формулах большие. Процессор конечно.
- для ускорения пересчета - ++ - для ускорения открытия - можно перенести файл на RAM-диск
Основной прирост скорости дает замена процессора на более быстрый и многоядерный (для пересчета формул в Excel 2007 и выше) Замена памяти и диска не сильно приведет к изменению производительности.
Лучше всего заменить формулы на разовые расчеты макросом, SQL запросы либо на сводные таблицы.
Например у Вас в файле огромное количество ВПР, которые постоянно пересчитываются. Если в постоянном пересчете нет необходимости то их нужно один раз использовать, а затем менять на значения.
fakenomore17 написал: Еще следует помнить что эксель не должен использоваться как База Данных для каких-то серьезных проектов.
по-моему у ТС как раз этот случай, исходя из:
Цитата
DivineSoul написал: Поясню подробнее - мой файлик является своеобразным аналогом 1С-ки - т.е. при помощи формул воссоздан почти весь функционал программы 1С для конкретных задач
MCH написал: Замена памяти ... не сильно приведет к изменению производительности.
для случаев, указанных в #13, наверно, всё-таки будут улучшения... мне кажется... по крайней мере, в своё время, чтобы взглянуть на AutoCad (много оперативки заполняет) - мне пришлось увеличивать её, и это помогло... имхо (случаи из #13 тоже, видимо, много озу могут занять)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
не хватило сил прочесть все посты 1.70 мегобайт это слишком много оптимизируйте файл. -очень часто вижу у людей файлы не оправдано тяжелые пример: человек мне скидывает файл весом 3-4 мб, я с ним колдую и получаю файл с тем же функционалом но весом 100-200 кб 2. железо на мой взгляд вполне нормальное, хотя на некоторых виражах нужна видюха, но я думаю вы с такими виражами не работаете -в случае макросов отключают скринапдейт 3. оптимизируйте формулы -очень часто , даже специ пишут формулы, а после того как файл разрастается то формулы вешают машину, для этого нужно оптимизировать формулы под объемы и нагрузки на проц (функционал тот же, а производительность в многократно отличается) 4. если макросы, то оптимизировать макросы под уменьшение нагрузки
суть: изучайте направление Как оптимизировать формулы/макросы для ускорение их работы
а то что вы ферари себе купите, она всеравно не поедет быстрей жигулей по грунтовой дороге и прицепленным белазом
у меня простая версия Экселя, в ней нет кнопки "Прочитать мысли и сгенерировать файл пример"
Бахтиёр, это для успокоения пользователей. Видимо в определённых ситуациях даёт прирост производительности, когда есть несвязанные блоки вычислений. Но в узких местах может быть только один процесс.
Пример - выполняем бесконечный цикл
Код
Option Explicit
Sub Кнопка1_Щелчок()
While True
Wend
End Sub
При этом видим, что у четырёхядерного процессора загрузка всего 25%. Операционная система бросает эксель с одного ядра на другое, но общая загрузка процессора - 25%, увы.
ArtHome, как бы Бахтиёр показывал настройку числа используемых процессоров в рамках темы. Excel использует многопоточные вычисления для расчётов формул. VBA же как был однопоточным, так и остался. Так что ваше замечание, в рамках темы не совсем корректно.
Андрей VG написал: Excel использует многопоточные вычисления для расчётов формул. VBA же как был однопоточным, так и остался. Так что ваше замечание, в рамках темы не совсем корректно.
Два разных несвязанных документа - без проблем, будут исполнятся в разных потоках. Но речь идёт у ТС про один проект, в котором изменение одной ячейки приводит к перерасчётам продолжительностью в несколько секунд.
Эксель банально пересчитывает таблицы данных одну за другой, хотя там-то уж можно было бы распараллелить работу, однако не получилось.
Потоки ещё могут использоваться при построении деревьев вычислений. Но для случая ТС уже вся эта работа выполнена, проект в активном актуальном состоянии. И после внесения изменений пользователем тупо начинается пересчёт всей цепочки. Возможно у ТС всё усугубляется неверной работой макросов - например запрещать и разрешать события надо всего один раз, избегая вложенностей.
Но на своих проектах, в оптимальности которых я уверен, я неоднократно видел, что когда эксель выполняет перерасчёты, грузится только одно ядро.
Более того, программируя на более других языках многопоточные приложения под Windows, я понимаю, почему это происходит именно так - трудно начать расчёт в параллельном потоке с середины вычислений не имея результата предыдущей части. Можно только что-то оптимизировать и подготовиться, но эта оптимизация выполняется в самом начале, и на десятый раз уже давно всё выоптимизировано...)
Excel отключает многопоточные вычисления, если в формулах используются такие функции: ДВССЫЛ; ЯЧЕЙКА c параметрами "формат2" или "адрес"; ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ, БДСУММ, БДПРОИЗВЕД и прочие функции баз данных, ссылающиеся на сводные таблицы; КУБЗНАЧЕНИЕ и прочие фукции работы с кубами; АДРЕС с параметром имени листа; ГИПЕРССЫЛКА; ТИП.ОШИБКИ; любые функции XLM в именах
Для больших книг с множеством формул бывает полезно нажать Alt-F11, затем CTRL-G, ввести ActiveWorkbook.ForceFullCalculation=True и нажать Enter. Данное действие для активной книги достаточно выполнить один раз, После этого в книге не используются старые деревья зависимостей формул, которые со временем могут стать громоздкими и занимать больше памяти и времени пересчета. При загрузке такой книги дерево зависимостей создается каждый раз заново.
Бахтиёр написал: Повесить на Private Sub Workbook_Open():
Да, но уточню, что данный метод дает эффект если на листе используется множество многоуровневых ссылок: ячейка ссылается на другую, та на третью. и так много раз. Для таких формул для каждого листа Excel создает своё дерево зависимостей. При изменении значения ячейки она сначала помечается как Dirty - отметка о необходимости пересчета зависимостей формул от этой ячейки. Затем для каждой такой помеченной ячейки сверху-вниз и слева-направо сканируются остальные ячейки, которые ссылаются на неё и найденные зависимые ячеки тоже помечаются как Dirty. Чем больше уровней вложения зависимостей, тем дольше такой процесс длится. После этого запускается пересчет формул всех найденных таким образом ячеек. А ForceFullCalculation=True исключает процесс сканирования и просто запускается процесс пересчета всех формул листа, что может быть быстрее (зависит от глубины зависимостей формул) . Но в зависимости от формул, данный метод может и замедлить общее время пересчета. ForceFullCalculation действует до тех пор, пока книга открыта в данной сессии excel и не запоминается в книге при последующих открытиях.
Замедление пересчета может быть связано и с тем, что книга редактировалась в другой версии Excel или с другим количеством ядер процессора. Тогда может помочь еще и такой метод оптимизации
Код
Sub Auto_Open()
' Сравнить версии пересчета, при различии - перестроить зависимости и пересчитать все формулы оптимально для данной версии Excel и данного компьютера (кол-во ядер)
If Application.CalculationVersion <> ThisWorkbook.CalculationVersion Then
Application.CalculateFullRebuild
End If
End Sub
ForceFullCalculation=True имеет смысл пробоватьа в тех случаях, когда книга открывается долго или когда редактирование/удаление ячеек производится медленно. Нужно еще учитывать то, что ForceFullCalculation действует на уровне приложения Excel, а не конкретной книги - пересчитываются все открытые книги
Владимир, спасибо большое за подробный (как всегда) ответ. Буду пробовать.
Цитата
ZVI написал: ...уточню, что данный метод дает эффект если на листе используется множество многоуровневых ссылок: ячейка ссылается на другую, та на третью. и так много раз... ...ForceFullCalculation=True имеет смысл пробоватьа в тех случаях, когда книга открывается долго или когда редактирование/удаление ячеек производится медленно...
ZVI написал: Тогда может помочь еще и такой метод оптимизации
честно говоря, только что применила (на всякий случай на открытие) 2 раза проверила - с последующим открытием с этими строками и без - и как-то ~ на 20сек. увеличилось время открытия (но уже, как вернуть, не знаю) (вернуть не удалось, поэтому вернулась к резервной копии файла, благо сохранила её заранее) P.S. хотя как-то даже на 20кб уменьшился файл (после код из #27)
Цитата
ZVI написал: ... книга редактировалась в другой версии Excel
(-случай примерно такой - переустанавливала windows и xl - немного др версии с xl2010 на xl2010sp1)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)