Подскажите, возможно ли получить системное время в переменную с точностью до доли секунды?

1. yura_nik 09.10.08 17:44 Сейчас в теме
Подскажите, возможно ли получить системное время в переменную с точностью до доли секунды?
Именно до сотых долей, как может системная функция time. Нужно для замера длительности алгоритма.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. coder1cv8 3471 09.10.08 17:46 Сейчас в теме
3. yura_nik 09.10.08 18:30 Сейчас в теме
Гениальный ответ. Совершенно точный и совершенно бессмысленный.
4. Душелов 4018 09.10.08 20:05 Сейчас в теме
Как поставлен вопрос, так и получен ответ.
5. yura_nik 09.10.08 21:19 Сейчас в теме
:) Не хватает ключевого слова "как"?
Просто ожидался ответ вроде T=Команда системы("time/t"); хотя это и не работает (:

Задача: замерить время до выполнения блока команд T1
замерить время после выполнения T2
получить дельту dt

Кто то подскажет решение именно на 8 платформе без использования внешних компонент?
6. CheBurator 3123 10.10.08 00:02 Сейчас в теме
а отладчик с замером времени выполнения кода..?
7. yura_nik 10.10.08 01:17 Сейчас в теме
Вот именно отладчик дает результат с сумасшедший точностью: 0.387414 если я правильно понимаю. Вопрос как самому получить такой результат? Почему именно нужен результат в переменную: просто это лабораторная работа по определению эффективности конвейера нескольких процессоров результаты замера dT нужно свести в массив и построить графики.

8. Душелов 4018 10.10.08 01:29 Сейчас в теме
Сама 1С такого не даст. Если использовать скрипты/внешние компоненты - уже будет не то.
9. Душелов 4018 10.10.08 01:32 Сейчас в теме
Ну или как в 7.7, замерить через:

_GetPerformanceCounter()
Синтаксис:
_GetPerformanceCounter()
Назначение:
Возвращает число миллисекунд (1000-чных долей секунды) прошедших с момента включения компьютера.
Замечание:
Разница между значениями двух замеров позволяет определить количество миллисекунд прошедших между замерами.
10. kitt 323 10.10.08 08:09 Сейчас в теме
Эх молодеж :)

Код
Функция Таймер()
   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
11. kitt 323 10.10.08 08:11 Сейчас в теме
то есть программа выполнялась приблизительно 15 миллисекунд
12. Vitek 10.10.08 08:12 Сейчас в теме
kitt +1. Взял на вооружение :)
13. coder1cv8 3471 10.10.08 09:43 Сейчас в теме
Верно Душелов заметил, какой вопрос - такой ответ. :)
А по теме, вот мой вариант:
Код
Функция Таймер()
   Скрипт=Новый COMОбъект("MSScriptControl.ScriptControl");
   Скрипт.Language="javascript";
   Возврат Скрипт.eval("new Date().getTime()");
КонецФункции

Т1=Таймер();
// выполнение кода...
Т2=Таймер();
Сообщить(Т1-Т2);
Показать полностью
14. yura_nik 10.10.08 12:00 Сейчас в теме
Большое спасибо всем, кто помог советом, но вот как грустно получается:

Выполнение 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С или не позволяет получить достоверные данные или не использует конвейер (что плохо), или я что то делаю не так.
15. Shaman100M 1151 10.10.08 13:27 Сейчас в теме
Немного не в тему, но все же: соотношение времени выполнения между двумя разными алгоритмами, измеряемое с пом. вот таких таймеров и замера в отладчике может существенно (в разы) отличаться, поэтому, таймеры полезны :) , для окончательной оптимизации.
16. poppy 13.10.08 13:13 Сейчас в теме
Странно, неужели есть мнение, что интерпретатор при выполнении программы может использовать конвейер процессора?
17. PeRom 51 13.10.08 15:49 Сейчас в теме
Чистота эксперемента? А ты уверен, что кроме твоего цикла компьютер в это время ничего не делает?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот