Подскажите, возможно ли получить системное время в переменную с точностью до доли секунды?
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
:) Не хватает ключевого слова "как"?
Просто ожидался ответ вроде T=Команда системы("time/t"); хотя это и не работает (:
Задача: замерить время до выполнения блока команд T1
замерить время после выполнения T2
получить дельту dt
Кто то подскажет решение именно на 8 платформе без использования внешних компонент?
Просто ожидался ответ вроде T=Команда системы("time/t"); хотя это и не работает (:
Задача: замерить время до выполнения блока команд T1
замерить время после выполнения T2
получить дельту dt
Кто то подскажет решение именно на 8 платформе без использования внешних компонент?
Вот именно отладчик дает результат с сумасшедший точностью: 0.387414 если я правильно понимаю. Вопрос как самому получить такой результат? Почему именно нужен результат в переменную: просто это лабораторная работа по определению эффективности конвейера нескольких процессоров результаты замера dT нужно свести в массив и построить графики.
Ну или как в 7.7, замерить через:
_GetPerformanceCounter()
Синтаксис:
_GetPerformanceCounter()
Назначение:
Возвращает число миллисекунд (1000-чных долей секунды) прошедших с момента включения компьютера.
Замечание:
Разница между значениями двух замеров позволяет определить количество миллисекунд прошедших между замерами.
_GetPerformanceCounter()
Синтаксис:
_GetPerformanceCounter()
Назначение:
Возвращает число миллисекунд (1000-чных долей секунды) прошедших с момента включения компьютера.
Замечание:
Разница между значениями двух замеров позволяет определить количество миллисекунд прошедших между замерами.
Эх молодеж :)
мои результаты:
=====================
время нач: 54 092,234375
время кон: 54 092,2500000009
всего:0,0156250009
Код |
---|
Функция Таймер()
ScrptCtrl=Новый COMОбъект("MSScriptControl.ScriptControl");
ScrptCtrl.Language="vbscript";
ScrptCtrl.AddCode("
|Function GetTimerX()
|GetTimerX = Timer()
|End Function
|");
РезВБ=ScrptCtrl.Run("GetTimerX");
Возврат РезВБ;
КонецФункции // Таймер()
Процедура КнопкаВыполнитьНажатие(Кнопка)
ВремяНач = Таймер();
Сообщить("=====================");
Сообщить("время нач: "+ВремяНач);
а=234;
б=123.123;
ф=43.123123;
Для сч=1 по 500 Цикл
ф= ф+б/а;
КонецЦикла;
ВремяКон = Таймер();
Сообщить("время кон: "+ВремяКон);
Сообщить("всего:"+(ВремяКон-ВремяНач));
КонецПроцедуры
Показать полностью |
мои результаты:
=====================
время нач: 54 092,234375
время кон: 54 092,2500000009
всего:0,0156250009
Верно Душелов заметил, какой вопрос - такой ответ. :)
А по теме, вот мой вариант:
А по теме, вот мой вариант:
Код |
---|
Функция Таймер()
Скрипт=Новый COMОбъект("MSScriptControl.ScriptControl");
Скрипт.Language="javascript";
Возврат Скрипт.eval("new Date().getTime()");
КонецФункции
Т1=Таймер();
// выполнение кода...
Т2=Таймер();
Сообщить(Т1-Т2);
Показать полностью |
Большое спасибо всем, кто помог советом, но вот как грустно получается:
Выполнение 1 блока
Т1=Таймер();
Для сч=1 по 1000000 Цикл
а=а+2;
а=а+3;а=а+5;
а=а+1;а=а+2;а=а+4;
а=а+2;а=а+4;а=а+6;а=а+1;
а=а+4;а=а+5;а=а+7;а=а+1;а=а+3;
а=а+1;а=а+2;а=а+3;а=а+4;а=а+5;а=а+6;
а=а+1;а=а+2;а=а+3;а=а+4;а=а+5;а=а+6;а=а+7;
а=а+1;а=а+2;а=а+3;а=а+4;а=а+5;а=а+6;а=а+7;а=а+8;
а=а+1;а=а+2;а=а+3;а=а+4;а=а+5;а=а+6;а=а+7;а=а+8;а=а+9;
а=а+1;а=а+2;а=а+3;а=а+4;а=а+5;а=а+6;а=а+7;а=а+8;а=а+9;а=а+10;
а=а+1;а=а+2;а=а+3;а=а+4;а=а+5;а=а+6;а=а+7;а=а+8;а=а+9;а=а+10;а=а+11;
КонецЦикла;
Т2 = Таймер();
и выполнение 2 блока
а=0;б=0;в=0;г=0;д=0;е=0;ж=0;з=0;к=0;л=0;м=0;
Т1=Таймер();
Для сч=1 по 1000000 Цикл
а=а+1;
а=а+1;б=б+2;
а=а+1;б=б+2;в=в+3;
а=а+1;б=б+2;в=в+3;г=г+4;
а=а+1;б=б+2;в=в+3;г=г+4;д=д+5;
а=а+1;б=б+2;в=в+3;г=г+4;д=д+5;е=е+6;
а=а+1;б=б+2;в=в+3;г=г+4;д=д+5;е=е+6;ж=ж+7;
а=а+1;б=б+2;в=в+3;г=г+4;д=д+5;е=е+6;ж=ж+7;з=з+8;
а=а+1;б=б+2;в=в+3;г=г+4;д=д+5;е=е+6;ж=ж+7;з=з+8;к=к+9;
а=а+1;б=б+2;в=в+3;г=г+4;д=д+5;е=е+6;ж=ж+7;з=з+8;к=к+9;л=л+10;
а=а+1;б=б+2;в=в+3;г=г+4;д=д+5;е=е+6;ж=ж+7;з=з+8;к=к+9;л=л+10;м=м+11;
КонецЦикла;
Т2 = Таймер();
Дает почти одинаковое время
время:97 568
время:97 817
а ведь выполнение второго блока должно было дать время в 1.5 раза меньше в случае реального использования конвейера в процессоре. Вывод движок 1С или не позволяет получить достоверные данные или не использует конвейер (что плохо), или я что то делаю не так.
Выполнение 1 блока
Т1=Таймер();
Для сч=1 по 1000000 Цикл
а=а+2;
а=а+3;а=а+5;
а=а+1;а=а+2;а=а+4;
а=а+2;а=а+4;а=а+6;а=а+1;
а=а+4;а=а+5;а=а+7;а=а+1;а=а+3;
а=а+1;а=а+2;а=а+3;а=а+4;а=а+5;а=а+6;
а=а+1;а=а+2;а=а+3;а=а+4;а=а+5;а=а+6;а=а+7;
а=а+1;а=а+2;а=а+3;а=а+4;а=а+5;а=а+6;а=а+7;а=а+8;
а=а+1;а=а+2;а=а+3;а=а+4;а=а+5;а=а+6;а=а+7;а=а+8;а=а+9;
а=а+1;а=а+2;а=а+3;а=а+4;а=а+5;а=а+6;а=а+7;а=а+8;а=а+9;а=а+10;
а=а+1;а=а+2;а=а+3;а=а+4;а=а+5;а=а+6;а=а+7;а=а+8;а=а+9;а=а+10;а=а+11;
КонецЦикла;
Т2 = Таймер();
и выполнение 2 блока
а=0;б=0;в=0;г=0;д=0;е=0;ж=0;з=0;к=0;л=0;м=0;
Т1=Таймер();
Для сч=1 по 1000000 Цикл
а=а+1;
а=а+1;б=б+2;
а=а+1;б=б+2;в=в+3;
а=а+1;б=б+2;в=в+3;г=г+4;
а=а+1;б=б+2;в=в+3;г=г+4;д=д+5;
а=а+1;б=б+2;в=в+3;г=г+4;д=д+5;е=е+6;
а=а+1;б=б+2;в=в+3;г=г+4;д=д+5;е=е+6;ж=ж+7;
а=а+1;б=б+2;в=в+3;г=г+4;д=д+5;е=е+6;ж=ж+7;з=з+8;
а=а+1;б=б+2;в=в+3;г=г+4;д=д+5;е=е+6;ж=ж+7;з=з+8;к=к+9;
а=а+1;б=б+2;в=в+3;г=г+4;д=д+5;е=е+6;ж=ж+7;з=з+8;к=к+9;л=л+10;
а=а+1;б=б+2;в=в+3;г=г+4;д=д+5;е=е+6;ж=ж+7;з=з+8;к=к+9;л=л+10;м=м+11;
КонецЦикла;
Т2 = Таймер();
Дает почти одинаковое время
время:97 568
время:97 817
а ведь выполнение второго блока должно было дать время в 1.5 раза меньше в случае реального использования конвейера в процессоре. Вывод движок 1С или не позволяет получить достоверные данные или не использует конвейер (что плохо), или я что то делаю не так.
Немного не в тему, но все же: соотношение времени выполнения между двумя разными алгоритмами, измеряемое с пом. вот таких таймеров и замера в отладчике может существенно (в разы) отличаться, поэтому, таймеры полезны :) , для окончательной оптимизации.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот