|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.11.2010, 12:18 | #1 |
Регистрация: 23.11.2010
Сообщений: 5
|
Оптимизация времени исполнения макроса
Здравствуйте!
Я пишу макрос (первый раз; только для себя и пары коллег) моделирующий поведение рыб методом Монте-Карло. Основная процедура повторятся сотни миллионов раз, поэтому время выполнения критично. У меня два вопроса. 1. Надо в макросе Excel (XP, 2007) получить значение системного времени. Я пока нашел такое Код:
Можно ли в макросе получить системное время точнее? Или упрощенная формулировка: Можно ли определить разницу между двумя запросами системного времени точнее, чем до секунды, при этом сама единица измерения времени меня не интересует лишь бы была на пару и более порядков меньше секунды? 2. Что будет быстрее исполняться из трех вариантов? Вариант 1. Код:
Код:
Код:
С уважением, Василий
Последний раз редактировалось basil0; 23.11.2010 в 12:29. Причина: некрасивое отображение примечаний в коде |
23.11.2010, 12:22 | #2 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Время обычно упрощённо меряют так:
tm=Timer ... код, время работы которого замеряем ... время=Timer-tm
webmoney: E265281470651 Z422237915069 R418926282008
|
23.11.2010, 12:23 | #3 | ||
Старожил
Регистрация: 15.05.2008
Сообщений: 2,058
|
Цитата:
Цитата:
Код:
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499 |
||
23.11.2010, 12:26 | #4 | |
Старожил
Регистрация: 15.05.2008
Сообщений: 2,058
|
Цитата:
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499 |
|
23.11.2010, 13:01 | #5 | |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Цитата:
Код:
Код:
Предлагаемый вариант, не смотря на более громоздкую запись, будет выполняться быстрее, т.к. второе условие будет проверяться только при выполнении 1-го. К тому же операция And вообще отсутствует.
Чем шире угол зрения, тем он тупее.
|
|
23.11.2010, 13:21 | #6 |
Форумчанин
Регистрация: 24.03.2010
Сообщений: 349
|
Откажитесь от использования типа Single в пользу Integer.
Тип Boolean в массивах - тоже не лучшее решение (меняйте на Integer). Если требуется скорость, не используйте массивы объектов и даже выражение: Dim a(200,4) as Integer если Вы не используете обращение через переменную, лучше заменить на: Dim a1(200) as Integer, a2(200) as Integer, a3(200) as Integer, a4(200) as Integer в общем, так: Код:
Нет нерешаемых задач - есть недостаток времени и данных!
|
23.11.2010, 14:37 | #7 |
Регистрация: 23.11.2010
Сообщений: 5
|
По предварительным экспериментам Timer чаще работает медленнее (приблизительно на 0.000001 сек), чем GetTickCount, однако разница недостоверна.
Тем не менее инструмент для оценки производительности найден с Вашей помощью, спасибо! Замена Single на Integer и двумерных массивов на одномерные понятна и логична. Также понятна и замена одного If-а с and на два. А вот замену Boolean на Integer ИМХО надо еще проверить, т.к. при Integer появляется лишняя операция сравнения с 0. If i%<0 , но If b (если b - Boolean) P.S. Хороший комп гробит программиста - сколько же я забыл элементарных вещей со времен DOS-a и 64 кВт оперативки
С уважением, Василий
|
23.11.2010, 15:15 | #8 |
Форумчанин
Регистрация: 24.03.2010
Сообщений: 349
|
Ну что же, Вы меня убедили.
Сделал два теста: Код:
Однако, однажды мне потребовалось создать массив из 1'000'000, кажется, элементов (возможно больше). Хотел сделать массив Boolean - Excel выдал ошибку "недостаточно память", пришлось делать на Integer
Нет нерешаемых задач - есть недостаток времени и данных!
|
23.11.2010, 15:34 | #9 | |
Участник клуба
Регистрация: 16.05.2010
Сообщений: 1,249
|
Цитата:
значений. Может быть, ошибка другим вызвана? |
|
23.11.2010, 15:40 | #10 | |
Форумчанин
Регистрация: 24.03.2010
Сообщений: 349
|
Цитата:
Хотя, возможно, это просто программное ограничение
Нет нерешаемых задач - есть недостаток времени и данных!
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
работа макроса во времени (вопрс новичка) | zander | Microsoft Office Excel | 1 | 19.08.2010 17:23 |
Создание во время исполнения | xakkkkker | Общие вопросы Delphi | 0 | 20.05.2010 17:46 |
оптимизация времени | willhunting | Фриланс | 10 | 05.05.2010 10:43 |
информирование пользователя о % исполнения | ADSoft | JavaScript, Ajax | 2 | 01.12.2009 03:14 |
оптимизация для меньшения времени выполнения | Ganmaker | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 19.11.2008 17:33 |