Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/34: Рейтинг темы: голосов - 34, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 22.07.2013
Сообщений: 9
1

Макрос со временем начинает тормозить

12.01.2014, 22:50. Показов 6830. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.

Нужен Ваш совет.

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

Проблема в том, что когда программа работает непрерывно 2-3 дня, то скорость работы цикла увеличивается. И если при старте проход цикла занимает 0.1 секунду, то через 2 дня время может составить 3 секунды. Помогает только - закрыть и открыть ексель файл.

Не могу понять какие показатели стоит проверить и на что обратить внимание.
Загрузка процессора и оперативная память не увеличиваются, массивов нет.

В цикле происходит запись в файл(примерно 200 строк каждую секунду), удаление ячейки (со сдвигом всех строк ниже), генерация случайного числа.

Что посоветуете?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2014, 22:50
Ответы с готовыми решениями:

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

Почему со временем Windows начинает тормозить?
Если долго не переустанавливать винду, последняя у меня продержалась ровно год, то система начинает...

Со временем программа начинает тормозить так, что зависает курсор мыши в системе
по сути программа очень маленькая, работают 3 таймера, которые сами себя останавливают и запускают...

Во время игры комп начинает тормозить на определенное время, при этом начинает пищать блок питания, как только тормоза прекращаются писк тоже проходит
Здравствуйте!!! У меня такая проблема: во время игры комп начинает тормозить на определенное время,...

7
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
15.01.2014, 14:39 2
Да, такое бывает - тоже много писал, удалял, раздвигал и через некоторое время начинались тормоза ... сталкивался с этим году в 2001 ... в результате, через пол года файл, в который сохранялись данные - ваабще отказался что-либо изменять (фактичеки, стал рид-онли). Тогда был зелен и проблему не решил ... т.е. все ниже - мои текущие предположения.
Напрашивается банальная утечка памяти или что-то близкое к этой теме.

Попробуйте разделить код на 2 части - принимающий(определяющий, решающий) изменения(в одном приложении Excel) и выполяющий эти изменения(в другом приложении Excel). Изменили - сделали End(он сбрасывает какое-то окружение интерпретатора и окружение вашего кода ... но не все!, в результате чего утечка может сохраниться и проблема не решится).
Если не поможет - пользуясь тем, что (как был совет сделать раньше) ваше второе приложение будет выполнять только задачи изменений (а не приема) - иногда его(управляя им из первого приложения) выгружать и загружать заново (в т.ч. с полным убиением самого Excel'я).

Если будут проблемы с организацией взаимодействия 2х таких отдельных приложений - пишите. Ребята здесь помогут. Способов много.
0
1261 / 147 / 32
Регистрация: 11.02.2011
Сообщений: 418
15.01.2014, 16:34 3
Цитата Сообщение от StepInLik Посмотреть сообщение
Если не поможет - пользуясь тем, что (как был совет сделать раньше) ваше второе приложение будет выполнять только задачи изменений (а не приема) - иногда его(управляя им из первого приложения) выгружать и загружать заново (в т.ч. с полным убиением самого Excel'я).
Помоему самый простой путь. Взять что-то в духе AutoIT да сделать чтоб раз в день (ночью к примеру) убивался и снова открывался эксель. Костыль конечно, но стоит ли тратить кучу времени на поиск проблем, если можно без проблем всё решить? Я же так понимаю что перебои на пару секунд в день не страшны?
1
0 / 0 / 0
Регистрация: 22.07.2013
Сообщений: 9
16.01.2014, 01:10  [ТС] 4
Цитата Сообщение от korvindeson Посмотреть сообщение
Помоему самый простой путь. Взять что-то в духе AutoIT да сделать чтоб раз в день (ночью к примеру) убивался и снова открывался эксель. Костыль конечно, но стоит ли тратить кучу времени на поиск проблем, если можно без проблем всё решить? Я же так понимаю что перебои на пару секунд в день не страшны?
Да, спасибо.
Я тоже уже подумываю над этим.
В программе можно установить время, когда она будет сохраняться и открывать/закрывать ексель.
Правда вместе с екселем должно перезапускаться еще одно приложение.
С кодом подскажете?

Необходимо закрыть сторонню программу
Закрыть и затем открыть ексель.
И открыть стороннюю программу.

Добавлено через 8 минут
Цитата Сообщение от korvindeson Посмотреть сообщение
Напрашивается банальная утечка памяти или что-то близкое к этой теме.
Утечка бы отразилась в загрузке памяти. А там все ровненько. Такое ощущение, буд то эксель как то запоминает или сохраняет удаленные ячейки.
Я раньше встраивал Sleep в программу, чтоб не сильно грузила процессор, а сейчас у меня Sleep(0) и работет еле еле=)
0
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
16.01.2014, 11:52 5
не по порядку.
Не понимайте все дословно. Утечку вы можете и не увидеть. Как сказал "... или что-то близкое к этой теме". Это может быть что угодно. К примеру - (почему-то)увеличивающийся счетчик каких-то пересчетов при определенных операциях каких-то изменений - и любое такое изменение будет происходить все медленнее и медленее ... для нас с вами - это "черный ящик".
Какое решение использовать - будь это AutoIt, WSH или даже древний KIX - ваш выбор.
Если (безответный)простой "серверой части", принимающей решения об изменениях или принимающей запросы на эти изменения - допустим(т.е. без последствий для системы: вы спокойно можете потерять запросы на изменения и/или не выполнить их вовремя и т.д.), то можете снимать и само приложение. А если нет, то подумайте над разделением.
Попробуйте с кодом сами. Покажите, что получилось. Вам подскажут если что ...
0
1261 / 147 / 32
Регистрация: 11.02.2011
Сообщений: 418
16.01.2014, 13:36 6
Цитата Сообщение от serler Посмотреть сообщение
Правда вместе с екселем должно перезапускаться еще одно приложение.
С кодом подскажете?
Не подскажу. С AutoIT работаю крайне мало и ерундово. Но по опыту ерунда гуглится быстро. Там вам получатся таймер нужен, активация окон и отрытие ярлыков
0
0 / 0 / 0
Регистрация: 22.07.2013
Сообщений: 9
28.01.2014, 22:38  [ТС] 7
В общем. Спасибо Вам за помощь и поддержку. Меня до сих пор удивляет и одновременно очень сильно помогает Ваш форум. Приятно что добрые люди готовы беплатно помочь решить чужую задачу.

Теперь по делу:
Действительно Excell начинает тормозить если в течение длительного времени происходить смещение ячеек. В моем случае это удаление одной ячейки со сдвигом вверх всего столбца.
Тормозит при это только ексель, сам процессор при этом не загружается.

Единственный выход который нашел я - это перезапускать ексель.
Делаю я это через bat файл.

В определенный момент времени ексель сохраняется, запускает bat, (который находится в той же папке) и макрос сам закрывает ексель.
bat файл начинает работать спустя 5 секунд после запуска и первой же командой запускает только что закрытый ексель файл.

В сам ексель встроен таймер, который перезапускает программу раз в час.

Вариантов кода для реализации очень много. Мой вариант:

Ексель

Visual Basic
1
2
3
ThisWorkbook.Save
Shell (ThisWorkbook.Path & "\xls_restart.bat")
Application.Quit
Таймер в ексель
Visual Basic
1
2
3
4
5
6
7
8
TimeForRestart = Now + TimeValue("00:59:00")   'при открытии книги для глабальной переменной
 
'в каком-нибудь цикле 
 If TimeForRestart < Now Then
     cmd_reset_Click  ' процедура перезагрузки екселя
     Else
     lbl_timeforrestart.Caption = Format(TimeForRestart - Now, "hh:nn:ss") ' вывод в окошко инфы о том сколько времени осталось
    End If
Бат
C++
1
2
ping -n 5 127.0.0.1 > nul
start "Excell" %~dp0%DT_11.xlsm
Конечно нужно позаботиться, что бы при закрытии и открытии екселя не вылетали окна с разными вопросами.
0
1261 / 147 / 32
Регистрация: 11.02.2011
Сообщений: 418
29.01.2014, 18:40 8
Цитата Сообщение от serler Посмотреть сообщение
Конечно нужно позаботиться, что бы при закрытии и открытии екселя не вылетали окна с разными вопросами.
Так и добавьте на всякий случай Application.DisplayAlerts = False
0
29.01.2014, 18:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2014, 18:40
Помогаю со студенческими работами здесь

Интернет начинает тормозить
Сижу на Ростелекоме. Проблема состоит в следующем: для меня нормальный пинг где-то 200 мс, после...

Резко начинает тормозить сервер
Доброго времени суток! Есть сайт на джумле и mysql сервер. Уже несколько дней подряд наблюдаю...

ASUS x550LB начинает тормозить
Вообщем ноутбук новый - 2 месяца нету и сегодня начались такие приколы что он стал дико тормозить...

Не сразу начинает тормозить Ubuntu
Здравствуйте. Поставил Ubuntu x32 через Wibe. Установил последние драйвера nvidia. Когда система...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru