Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
AndreA SN
1004 / 108 / 2
Регистрация: 26.08.2011
Сообщений: 989
Записей в блоге: 2
1

Как в VBA узнать длительность операции в миллисекундах?

28.05.2016, 11:46. Просмотров 2240. Ответов 12
Метки нет (Все метки)

Выполняю ряд функций в основной функции, которая в свою очередь выполняется в цикле заголовочной функции.
Длительность выполнения заголовочной функции слишком высокая.
Замерил время выполнения всех основных функций в заголовочной - выловил ту самую основную, которая и тормозит процесс. Но когда замерил время выполнения функций, выполняющихся в тормозной основной функции - дебугер выдал мне нолики.

как измеряю время:
Visual Basic
1
2
3
4
5
6
нач = Time()
... выполняем функцию
кон = Time()
рез = кон - нач
нач = кон
Debug.Print "Время выполнения функции " & рез
Вообщем когда миллисекунды за один цикл итерации складываются в 1000 итераций - это уже существенные минуты
Но я измерить эти миллисекунды не могу. Как?

Добавлено через 8 минут
Вот содержимое окошка immediate:

Этап 0 0
Этап 1 1,15740740740389E-05
Этап 2 6,94444444444553E-05
Этап 3 0
Этап 4 0
Этап 5 0
Этап 6 1,15740740740944E-05
Этап 7 1,15740740740389E-05

А это время выполнения отельных функций во 2 этапе

Начало 0
Создание_массивов_записи_БД 0
Наполнение_массивов_записи_БД 0
Обработка_пустышек_массивов_записи_БД 0
Запись_данных 0
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2016, 11:46
Ответы с готовыми решениями:

Как узнать разрядность ОС VBA
здравствуйте, собственно сабж + узнать название ОС, спасибо

Как узнать пароль на VBA?
как узнать пароль пользователя при поиощи VBA

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

Как узнать длительность аудиофайла?
Здравствуйте. Пишу аудиоплеер, работаю над косметикой, хочу сделать свой таймлайн private void...

sndPlaySound - как узнать длительность?
Я использовал следующий код, для того чтобы проиграть звуковой файл *.wav (жаль, что нельзя...

12
Catstail
Модератор
25161 / 12837 / 2371
Регистрация: 12.02.2012
Сообщений: 20,928
28.05.2016, 22:31 2
AndreA SN, вместо Time лучше использовать API-функцию GetTickCount
0
AndreA SN
1004 / 108 / 2
Регистрация: 26.08.2011
Сообщений: 989
Записей в блоге: 2
28.05.2016, 23:40  [ТС] 3
И вот тут я завис в ступоре полном))) как?)))
0
Catstail
Модератор
25161 / 12837 / 2371
Регистрация: 12.02.2012
Сообщений: 20,928
29.05.2016, 08:22 4
Лучший ответ Сообщение было отмечено AndreA SN как решение

Решение

Вот пример кода с иcпользованием GetTickCount - замер времени на сортировку массива:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Declare Function GetTickCount Lib "kernel32" () As Long
 
Sub Test()
 
Dim X(1 To 4000) As Integer
 
    Randomize
    
    For i% = 1 To 4000
        X(i%) = 10 * Rnd()
    Next i%
 
    t_Start& = GetTickCount
 
    QuickSort X(), 1, 4000
 
    t_End& = GetTickCount
    
    Debug.Print t_End& - t_Start&
 
End Sub
Функция GetTickCount возвращает число миллисекунд, прошедшее после загрузки ОС, и позволяет замерить временной интервал с точностью до 10 миллисек. Достаточно?
2
29.05.2016, 08:22
tvitaly1
81 / 4 / 2
Регистрация: 29.04.2015
Сообщений: 117
02.07.2017, 12:07 5
В Excel 2010 API GetTickCount в VBA не объявляется, как решить такую проблему?

Добавлено через 59 минут
Нашел способ, в Excel 2010 API функция объявляется так:

Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
0
Catstail
Модератор
25161 / 12837 / 2371
Регистрация: 12.02.2012
Сообщений: 20,928
02.07.2017, 12:41 6
Цитата Сообщение от tvitaly1 Посмотреть сообщение
Нашел способ, в Excel 2010 API функция объявляется так:
- чем этот способ отличается от того, что привел я? А, заметил PtrSafe.
0
tvitaly1
81 / 4 / 2
Регистрация: 29.04.2015
Сообщений: 117
02.07.2017, 14:00 7
По большому счету не чем, но без PtrSafe в 2010 функция не объявится, а в 2003 с PtrSafe так же не выполнится.

Добавлено через 1 час 15 минут
Ура, есть способ, что бы работала на разных версиях, объявляем так:

#If VBA7 Then
Private Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
#Else
Private Declare Function GetTickCount Lib "kernel32" () As Long
#End If

И сохраняем файл в формате .xls
0
Hugo121
6458 / 2514 / 452
Регистрация: 19.10.2012
Сообщений: 7,535
02.07.2017, 14:26 8
Цитата Сообщение от tvitaly1 Посмотреть сообщение
без PtrSafe в 2010 функция не объявится
- а вот у меня объявится.
Не надо делать таких безаппеляционных заявлений! Народ только путаете
0
tvitaly1
81 / 4 / 2
Регистрация: 29.04.2015
Сообщений: 117
02.07.2017, 15:15 9
Разрядность другая машины, или 2010 для другой разрядности, я так думаю, в любом случае переключатель универсален в файле .xls
0
Dragokas
Эксперт WindowsАвтор FAQ
17108 / 7163 / 862
Регистрация: 25.12.2011
Сообщений: 10,964
Записей в блоге: 16
02.07.2017, 18:14 10
Через QueryPerformanceCounter замер будет более точным.

Можете посмотреть здесь пример. Или прямо так и подключить в виде класса.

Для x64, возможно, тоже потребуется изменить декларацию на PtrSafe
0
tvitaly1
81 / 4 / 2
Регистрация: 29.04.2015
Сообщений: 117
02.07.2017, 18:28 11
Переход по ссылке дает ошибку.
0
Dragokas
Эксперт WindowsАвтор FAQ
17108 / 7163 / 862
Регистрация: 25.12.2011
Сообщений: 10,964
Записей в блоге: 16
02.07.2017, 19:21 12
Ой, простите, не то прикрепил. Вот правильная: Готовые решения и полезные коды на Visual Basic 6.0
1
tvitaly1
81 / 4 / 2
Регистрация: 29.04.2015
Сообщений: 117
02.07.2017, 19:28 13
Спасибо!
0
02.07.2017, 19:28
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2017, 19:28

Как узнать длительность mp3 файла
Здравствуйте, как можно узнать точную длительность Mp3 файла? в taglib библиотеке этого нет :( ...

Как узнать длительность видео (QuickTime) в Delphi XE2 FireMonkey?
Помогите! Нужно банально узнать длительность ролика MOV Проект сделан на FireMonkey Спс

Обновление и длительность операции
Добрый день. Есть задача: обновлять график с заданным интервалом и в течение заданного времени....


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.