Есть ли код в VBA, я могу обернуть функцию, которая позволит мне узнать время, которое требуется для запуска, чтобы я мог сравнивать разные времена работы функций?Как вы проверяете время работы кода VBA?
ответ
Если ваши функции не очень медленные, вам понадобится таймер с очень высоким разрешением. Самый точный, который я знаю, - QueryPerformanceCounter
. Google для получения дополнительной информации. Попробуйте толкая следующее в класс, назовем его CTimer
сказать, то вы можете сделать экземпляр где-то глобальное и просто позвонить .StartCounter
и .TimeElapsed
Option Explicit
Private Type LARGE_INTEGER
lowpart As Long
highpart As Long
End Type
Private Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As LARGE_INTEGER) As Long
Private Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As LARGE_INTEGER) As Long
Private m_CounterStart As LARGE_INTEGER
Private m_CounterEnd As LARGE_INTEGER
Private m_crFrequency As Double
Private Const TWO_32 = 4294967296# ' = 256# * 256# * 256# * 256#
Private Function LI2Double(LI As LARGE_INTEGER) As Double
Dim Low As Double
Low = LI.lowpart
If Low < 0 Then
Low = Low + TWO_32
End If
LI2Double = LI.highpart * TWO_32 + Low
End Function
Private Sub Class_Initialize()
Dim PerfFrequency As LARGE_INTEGER
QueryPerformanceFrequency PerfFrequency
m_crFrequency = LI2Double(PerfFrequency)
End Sub
Public Sub StartCounter()
QueryPerformanceCounter m_CounterStart
End Sub
Property Get TimeElapsed() As Double
Dim crStart As Double
Dim crStop As Double
QueryPerformanceCounter m_CounterEnd
crStart = LI2Double(m_CounterStart)
crStop = LI2Double(m_CounterEnd)
TimeElapsed = 1000# * (crStop - crStart)/m_crFrequency
End Property
Мы использовали решение, основанное на timeGetTime в winmm.dll для точности миллисекунды на протяжении многих лет. См. http://www.aboutvb.de/kom/artikel/komstopwatch.htm
Статья написана на немецком языке, но код загрузки (класс VBA, завершающий вызов функции dll) достаточно прост, чтобы использовать и понимать, не имея возможности прочитать статью.
Функция таймера в VBA дает вам количество секунд, прошедших с полуночи, до 1/100 секунды.
Dim t as single
t = Timer
'code
MsgBox Timer - t
Если вам нужно большее разрешение, я бы просто выполнил функцию 1000 раз и разделил общее время на 1000.
Если вы пытаетесь вернуть время как секундомер можно использовать следующий API, который возвращает время в миллисекундах с момента запуска системы:
Public Declare Function GetTickCount Lib "kernel32.dll"() As Long
Sub testTimer()
Dim t As Long
t = GetTickCount
For i = 1 To 1000000
a = a + 1
Next
MsgBox GetTickCount - t, , "Milliseconds"
End Sub
после http://www.pcreview.co.uk/forums/grab-time-milliseconds-included-vba-t994765.html (как timeGetTime в winmm.dll не было работа для меня и QueryPerformanceCounter была слишком сложной для выполнения этой задачи необходимо)
для Newbees эти ссылок объясняют, как сделать автоматическое профилирование всех подлодок, которые вы хотите время монитора:
http://www.nullskull.com/a/1602/profiling-and-optimizing-vba.aspx
http://sites.mcpher.com/share/Home/excelquirks/optimizationlink см procProfiler.zip в http://sites.mcpher.com/share/Home/excelquirks/downlable-items
- 1. VBA изменение кода во время работы
- 2. Как вы проверяете код GWT?
- 3. Как вы проверяете/проверяете версию kivy?
- 4. Как вы проверяете разрешения?
- 5. Как вы проверяете NSTouchBar
- 6. Как вы проверяете уровень работы и опыта консультантов?
- 7. Время работы в VBA
- 8. Как вы проверяете и проверяете известные функции браузера IE?
- 9. Как вы проверяете переменные Request.QueryString []?
- 10. Как вы проверяете несколько элементов?
- 11. Как вы проверяете конфигурацию приложения?
- 12. VBA excel code время работы
- 13. Насколько вы проверяете свои контроллеры?
- 14. Как вы проверяете изменение значения в строке
- 15. Как вы проверяете события клавиатуры с киви?
- 16. Как вы проверяете окно в Tkinter?
- 17. Как вы проверяете наличие тега на странице?
- 18. Как вы проверяете внутреннее состояние объекта?
- 19. Как вы проверяете угловые обещания с задержками?
- 20. Как вы проверяете подпись, возвращенную appengine.SignBytes?
- 21. Как вы проверяете класс экземпляра csv.writer Python?
- 22. Какое время работы фрагмента кода
- 23. Время работы процессора части кода
- 24. Как показать ошибки кода во время работы
- 25. Как долго время работы кода в python
- 26. Как вы проверяете результаты «client.execute» в Nighwatch?
- 27. Как вы проверяете модели с несколькими частями?
- 28. SpriteKit- Как вы проверяете пересечения между SKNodes?
- 29. Как вы проверяете Hive metastore uri
- 30. как вы проверяете открытые связи фрейма сущности
Я реализовал это в Excel VBA (добавление в Overhead, как указано в этой статье базы знаний: http://support.microsoft.com/kb/172338. Он отлично работал. Благодарю. – 2008-10-14 22:55:30
Спасибо, это хорошо работает и для меня. `TimeElapsed()` дает результат в миллисекундах. Я не реализовал компенсацию накладных расходов, потому что меня больше беспокоило влияние заикания в накладных расходах, чем совершенная точность. – Justin 2011-01-11 15:59:53
Это много подслушивает (в строках кода для управления) - если вы можете жить с точностью ~ 10 мс, @ ниже ответ Kodak дает то же самое в одной строке кода (импортируя «GetTickCount» из kernel32). – BrainSlugs83 2014-03-08 00:45:24