5 Знаков - страница 4

 
Boris:
Тогда зачем в стилизации пишется без пропусков (X=Y, X>Y и пр.)? А бесконечные лестницы растягивает коды на метры, ведь в Эдиторе помещается не более 50-ти линий! Для меня главное всё, логика, рациональность, скорость и удобство!

А вот это уже просто такой стандарт стиля принят в стилизаторе MetaEditor'а. Если он не нравится, то можно его не использовать. Но уж лучше такой "принудительный" стиль, чем его отсутствие, ИМХО :)

Никакого отношения к скорости работы конечного исполняемого файла это не имеет.


P.S. насчёт 50 линий - у всех разное разрешение мониторов. Лично у меня на одном мониторе 54, на втором 59 помещается. И это ещё довольно "дохлые" мониторы. У кого-то и все 200+ могут помещаться (4К).

 
Sergey Eremin:

Спасибо ещё раз! При применении этой функции результаты такие (10 замеров по 10 проходов по миллиону итераций в циклах):

Вот теперь я даже не знаю что и думать.

Неужели Point() быстрее, чем _Point, или опять вмешивается погрешность, но теперь уже у GetMicrosecondCount()?

Прошу посмотреть код, может я где-то допустил ошибку?

Какая разница получается? Тоже 10-15 мс?

Скорее всего, компилятор заменяет вызов функции прямым обращением к той же переменной.

Можно попробовать сделать замер в режиме профилирования, в этом случае не все оптимизации компилятора работают. 

 
Andrey Khatimlianskii:

Какая разница получается? Тоже 10-15 мс?

Скорее всего, компилятор заменяет вызов функции прямым обращением к той же переменной.

Можно попробовать сделать замер в режиме профилирования, в этом случае не все оптимизации компилятора работают. 

Нет, Андрей, не 10-15.

У себя только уменьшила выражение в условных операторах с:

 for(int i = 0; i < 1000000000; i++)

на:

for(int i = 0; i < 1000; i++)

и прогнала на медленном компе с малой оперативкой (2Гб).

Получается следующее:

0       16:46:17.033    Script test S USDJPY,M5: loaded successfully
0       16:46:17.052    test S USDJPY,M5: initialized
0       16:46:17.053    test S USDJPY,M5: Alert: -------
0       16:46:17.054    test S USDJPY,M5: Alert: 0)0)_Point: 11 | Point(): 8 | \n1)_Point: 12 | Point(): 7 | \n2)_Point: 8 | Point(): 7 | \n3)_Point: 8 | Point(): 7 | \n4)_Point: 8 | Point(): 7 | \n5)_Point: 10 | Point(): 7 | \n6)_Point: 7 | Point(): 7 | \n7)_Point: 7 | Point(): 8 | \n8)_Point: 9 | Point(): 7 | \n9)_Point: 8 | Point(): 80 | \n\n\n_Point равно Point() 1 раз; _Point быстрее Point() 2 раз; _Point медленнее Point() 7 раз
0       16:46:17.054    test S USDJPY,M5: Alert: 1)0)_Point: 9 | Point(): 7 | \n1)_Point: 8 | Point(): 7 | \n2)_Point: 8 | Point(): 7 | \n3)_Point: 7 | Point(): 7 | \n4)_Point: 8 | Point(): 8 | \n5)_Point: 8 | Point(): 7 | \n6)_Point: 8 | Point(): 8 | \n7)_Point: 8 | Point(): 8 | \n8)_Point: 9 | Point(): 8 | \n9)_Point: 8 | Point(): 8 | \n\n\n_Point равно Point() 5 раз; _Point быстрее Point() 0 раз; _Point медленнее Point() 5 раз
0       16:46:17.054    test S USDJPY,M5: Alert: 2)0)_Point: 10 | Point(): 8 | \n1)_Point: 8 | Point(): 7 | \n2)_Point: 8 | Point(): 8 | \n3)_Point: 8 | Point(): 8 | \n4)_Point: 8 | Point(): 7 | \n5)_Point: 7 | Point(): 7 | \n6)_Point: 9 | Point(): 8 | \n7)_Point: 8 | Point(): 8 | \n8)_Point: 8 | Point(): 8 | \n9)_Point: 7 | Point(): 7 | \n\n\n_Point равно Point() 6 раз; _Point быстрее Point() 0 раз; _Point медленнее Point() 4 раз
0       16:46:17.055    test S USDJPY,M5: Alert: 3)0)_Point: 9 | Point(): 8 | \n1)_Point: 8 | Point(): 7 | \n2)_Point: 8 | Point(): 7 | \n3)_Point: 8 | Point(): 8 | \n4)_Point: 64 | Point(): 7 | \n5)_Point: 8 | Point(): 8 | \n6)_Point: 8 | Point(): 8 | \n7)_Point: 9 | Point(): 8 | \n8)_Point: 8 | Point(): 7 | \n9)_Point: 9 | Point(): 7 | \n\n\n_Point равно Point() 3 раз; _Point быстрее Point() 0 раз; _Point медленнее Point() 7 раз
0       16:46:17.055    test S USDJPY,M5: Alert: 4)0)_Point: 9 | Point(): 7 | \n1)_Point: 8 | Point(): 8 | \n2)_Point: 8 | Point(): 7 | \n3)_Point: 8 | Point(): 7 | \n4)_Point: 8 | Point(): 7 | \n5)_Point: 8 | Point(): 7 | \n6)_Point: 9 | Point(): 7 | \n7)_Point: 8 | Point(): 8 | \n8)_Point: 8 | Point(): 7 | \n9)_Point: 8 | Point(): 7 | \n\n\n_Point равно Point() 2 раз; _Point быстрее Point() 0 раз; _Point медленнее Point() 8 раз
0       16:46:17.055    test S USDJPY,M5: Alert: 5)0)_Point: 9 | Point(): 7 | \n1)_Point: 8 | Point(): 8 | \n2)_Point: 8 | Point(): 8 | \n3)_Point: 8 | Point(): 7 | \n4)_Point: 8 | Point(): 7 | \n5)_Point: 9 | Point(): 7 | \n6)_Point: 8 | Point(): 8 | \n7)_Point: 8 | Point(): 7 | \n8)_Point: 8 | Point(): 7 | \n9)_Point: 9 | Point(): 7 | \n\n\n_Point равно Point() 3 раз; _Point быстрее Point() 0 раз; _Point медленнее Point() 7 раз
0       16:46:17.056    test S USDJPY,M5: Alert: 6)0)_Point: 10 | Point(): 7 | \n1)_Point: 56 | Point(): 7 | \n2)_Point: 7 | Point(): 30 | \n3)_Point: 8 | Point(): 8 | \n4)_Point: 7 | Point(): 7 | \n5)_Point: 8 | Point(): 7 | \n6)_Point: 8 | Point(): 8 | \n7)_Point: 8 | Point(): 7 | \n8)_Point: 9 | Point(): 7 | \n9)_Point: 8 | Point(): 7 | \n\n\n_Point равно Point() 3 раз; _Point быстрее Point() 1 раз; _Point медленнее Point() 6 раз
0       16:46:17.056    test S USDJPY,M5: Alert: 7)0)_Point: 10 | Point(): 7 | \n1)_Point: 8 | Point(): 7 | \n2)_Point: 8 | Point(): 7 | \n3)_Point: 8 | Point(): 7 | \n4)_Point: 8 | Point(): 7 | \n5)_Point: 8 | Point(): 8 | \n6)_Point: 9 | Point(): 7 | \n7)_Point: 8 | Point(): 8 | \n8)_Point: 8 | Point(): 8 | \n9)_Point: 8 | Point(): 8 | \n\n\n_Point равно Point() 4 раз; _Point быстрее Point() 0 раз; _Point медленнее Point() 6 раз
0       16:46:17.057    test S USDJPY,M5: Alert: 8)0)_Point: 10 | Point(): 7 | \n1)_Point: 8 | Point(): 7 | \n2)_Point: 8 | Point(): 7 | \n3)_Point: 8 | Point(): 7 | \n4)_Point: 8 | Point(): 8 | \n5)_Point: 8 | Point(): 7 | \n6)_Point: 8 | Point(): 7 | \n7)_Point: 8 | Point(): 7 | \n8)_Point: 9 | Point(): 7 | \n9)_Point: 8 | Point(): 8 | \n\n\n_Point равно Point() 2 раз; _Point быстрее Point() 0 раз; _Point медленнее Point() 8 раз
0       16:46:17.057    test S USDJPY,M5: Alert: 9)0)_Point: 10 | Point(): 7 | \n1)_Point: 8 | Point(): 8 | \n2)_Point: 8 | Point(): 8 | \n3)_Point: 8 | Point(): 7 | \n4)_Point: 8 | Point(): 7 | \n5)_Point: 8 | Point(): 7 | \n6)_Point: 8 | Point(): 8 | \n7)_Point: 8 | Point(): 7 | \n8)_Point: 8 | Point(): 7 | \n9)_Point: 8 | Point(): 7 | \n\n\n_Point равно Point() 3 раз; _Point быстрее Point() 0 раз; _Point медленнее Point() 7 раз
0       16:46:17.057    test S USDJPY,M5: uninit reason 0
0       16:46:17.058    Script test S USDJPY,M5: removed
0       16:47:35.025    Script test S USDJPY,M5: loaded successfully
0       16:47:35.050    test S USDJPY,M5: initialized
0       16:47:35.105    test S USDJPY,M5: Alert: -------
0       16:47:35.105    test S USDJPY,M5: Alert: 0)0)_Point: 13 | Point(): 8 | \n1)_Point: 9 | Point(): 7 | \n2)_Point: 7 | Point(): 7 | \n3)_Point: 7 | Point(): 7 | \n4)_Point: 8 | Point(): 8 | \n5)_Point: 10 | Point(): 6 | \n6)_Point: 9 | Point(): 7 | \n7)_Point: 9 | Point(): 7 | \n8)_Point: 9 | Point(): 7 | \n9)_Point: 7 | Point(): 6 | \n\n\n_Point равно Point() 3 раз; _Point быстрее Point() 0 раз; _Point медленнее Point() 7 раз
0       16:47:35.106    test S USDJPY,M5: Alert: 1)0)_Point: 10 | Point(): 8 | \n1)_Point: 8 | Point(): 7 | \n2)_Point: 8 | Point(): 6 | \n3)_Point: 8 | Point(): 8 | \n4)_Point: 8 | Point(): 7 | \n5)_Point: 8 | Point(): 7 | \n6)_Point: 8 | Point(): 8 | \n7)_Point: 9 | Point(): 8 | \n8)_Point: 9 | Point(): 8 | \n9)_Point: 7 | Point(): 7 | \n\n\n_Point равно Point() 3 раз; _Point быстрее Point() 0 раз; _Point медленнее Point() 7 раз
0       16:47:35.106    test S USDJPY,M5: Alert: 2)0)_Point: 9 | Point(): 7 | \n1)_Point: 8 | Point(): 8 | \n2)_Point: 7 | Point(): 8 | \n3)_Point: 8 | Point(): 7 | \n4)_Point: 8 | Point(): 8 | \n5)_Point: 8 | Point(): 7 | \n6)_Point: 8 | Point(): 8 | \n7)_Point: 8 | Point(): 8 | \n8)_Point: 8 | Point(): 8 | \n9)_Point: 8 | Point(): 8 | \n\n\n_Point равно Point() 6 раз; _Point быстрее Point() 1 раз; _Point медленнее Point() 3 раз
0       16:47:35.107    test S USDJPY,M5: Alert: 3)0)_Point: 9 | Point(): 6 | \n1)_Point: 7 | Point(): 8 | \n2)_Point: 7 | Point(): 7 | \n3)_Point: 8 | Point(): 8 | \n4)_Point: 9 | Point(): 8 | \n5)_Point: 8 | Point(): 7 | \n6)_Point: 8 | Point(): 8 | \n7)_Point: 8 | Point(): 7 | \n8)_Point: 9 | Point(): 7 | \n9)_Point: 8 | Point(): 8 | \n\n\n_Point равно Point() 4 раз; _Point быстрее Point() 1 раз; _Point медленнее Point() 5 раз
0       16:47:35.107    test S USDJPY,M5: Alert: 4)0)_Point: 9 | Point(): 7 | \n1)_Point: 7 | Point(): 7 | \n2)_Point: 7 | Point(): 8 | \n3)_Point: 8 | Point(): 8 | \n4)_Point: 8 | Point(): 8 | \n5)_Point: 9 | Point(): 7 | \n6)_Point: 9 | Point(): 7 | \n7)_Point: 8 | Point(): 8 | \n8)_Point: 8 | Point(): 8 | \n9)_Point: 7 | Point(): 8 | \n\n\n_Point равно Point() 5 раз; _Point быстрее Point() 2 раз; _Point медленнее Point() 3 раз
0       16:47:35.107    test S USDJPY,M5: Alert: 5)0)_Point: 9 | Point(): 8 | \n1)_Point: 8 | Point(): 7 | \n2)_Point: 7 | Point(): 7 | \n3)_Point: 7 | Point(): 8 | \n4)_Point: 8 | Point(): 8 | \n5)_Point: 8 | Point(): 7 | \n6)_Point: 8 | Point(): 8 | \n7)_Point: 8 | Point(): 7 | \n8)_Point: 8 | Point(): 8 | \n9)_Point: 8 | Point(): 8 | \n\n\n_Point равно Point() 5 раз; _Point быстрее Point() 1 раз; _Point медленнее Point() 4 раз
0       16:47:35.108    test S USDJPY,M5: Alert: 6)0)_Point: 9 | Point(): 8 | \n1)_Point: 8 | Point(): 8 | \n2)_Point: 8 | Point(): 8 | \n3)_Point: 8 | Point(): 7 | \n4)_Point: 8 | Point(): 7 | \n5)_Point: 8 | Point(): 7 | \n6)_Point: 8 | Point(): 8 | \n7)_Point: 8 | Point(): 8 | \n8)_Point: 7 | Point(): 8 | \n9)_Point: 7 | Point(): 8 | \n\n\n_Point равно Point() 4 раз; _Point быстрее Point() 2 раз; _Point медленнее Point() 4 раз
0       16:47:35.108    test S USDJPY,M5: Alert: 7)0)_Point: 10 | Point(): 8 | \n1)_Point: 8 | Point(): 8 | \n2)_Point: 7 | Point(): 7 | \n3)_Point: 8 | Point(): 8 | \n4)_Point: 8 | Point(): 7 | \n5)_Point: 7 | Point(): 6 | \n6)_Point: 7 | Point(): 7 | \n7)_Point: 8 | Point(): 7 | \n8)_Point: 7 | Point(): 6 | \n9)_Point: 8 | Point(): 7 | \n\n\n_Point равно Point() 4 раз; _Point быстрее Point() 0 раз; _Point медленнее Point() 6 раз
0       16:47:35.109    test S USDJPY,M5: Alert: 8)0)_Point: 11 | Point(): 8 | \n1)_Point: 9 | Point(): 8 | \n2)_Point: 8 | Point(): 8 | \n3)_Point: 8 | Point(): 7 | \n4)_Point: 8 | Point(): 8 | \n5)_Point: 9 | Point(): 8 | \n6)_Point: 8 | Point(): 7 | \n7)_Point: 9 | Point(): 8 | \n8)_Point: 10 | Point(): 8 | \n9)_Point: 9 | Point(): 8 | \n\n\n_Point равно Point() 2 раз; _Point быстрее Point() 0 раз; _Point медленнее Point() 8 раз
0       16:47:35.109    test S USDJPY,M5: Alert: 9)0)_Point: 12 | Point(): 9 | \n1)_Point: 7 | Point(): 8 | \n2)_Point: 9 | Point(): 8 | \n3)_Point: 8 | Point(): 8 | \n4)_Point: 8 | Point(): 8 | \n5)_Point: 8 | Point(): 36 | \n6)_Point: 8 | Point(): 8 | \n7)_Point: 8 | Point(): 8 | \n8)_Point: 8 | Point(): 8 | \n9)_Point: 9 | Point(): 8 | \n\n\n_Point равно Point() 5 раз; _Point быстрее Point() 2 раз; _Point медленнее Point() 3 раз
0       16:47:35.109    test S USDJPY,M5: uninit reason 0
0       16:47:35.110    Script test S USDJPY,M5: removed

А при профилировании скорость медленнее, в т.ч., и поскольку на само профилирование уходит время. И об этом помню писалось.

При профилировании у меня следующее:


 
Sergey Eremin:

Плин, искренне восхищена вашим стремлением быть объективным и пытливостью вашего ума! И здорово, полагаю, что такой человек как Andrey Khatimlianskii, которым также восхищаюсь давно, вступил в разговор.

Спасибо, что есть вы и вам подобные!

 
Andrey Khatimlianskii:

Какая разница получается? Тоже 10-15 мс?

Скорее всего, компилятор заменяет вызов функции прямым обращением к той же переменной.

Можно попробовать сделать замер в режиме профилирования, в этом случае не все оптимизации компилятора работают. 

Вот полный вывод одного из замеров:

0)_Point: 2450485 | Point(): 2551454 |
1)_Point: 2533783 | Point(): 2484250 |
2)_Point: 2754030 | Point(): 2409606 |
3)_Point: 2406919 | Point(): 2389273 |
4)_Point: 2410046 | Point(): 2433121 |
5)_Point: 2419303 | Point(): 2404954 |
6)_Point: 2475729 | Point(): 2378392 |
7)_Point: 2420821 | Point(): 2379233 |
8)_Point: 2459982 | Point(): 2425660 |
9)_Point: 2483506 | Point(): 2427472 |


_Point равно Point() 0 раз; _Point быстрее Point() 2 раз; _Point медленнее Point() 8 раз

Например, во второй строке: 2533783 - 2484250 = 49533. Примерно 50 мс, если не путаю. Но здесь у меня на порядок больше итераций (миллион против ста тысяч прежде), так что, получается, если вернуться к прежнему порядку, то будет 5 мс.

UPD: а вот в третьей строке уже ~340 мс разница, если не путаю (2754030 - 2409606 = 344424), т.е. примерно 34 мс при предыдущем порядке.


Я прогнал несколько десятков раз скрипт, других результатов не получил: у меня получается, что Point() быстрее, чем _Point почти всегда если замерять при помощи GetMicrosecondCount(). Раньше (с GetTickCnt()) туда-сюда гуляло в пределах погрешности, а теперь довольно равномерный результат.

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


С профилированием запустил, но результат будет весьма не скоро, судя по всему :)

 

Немного поправил начальный скрипт, при профилировании таки ясно видно _Point быстрее.

#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double point=0.0;
   ulong t1=0,t2=0,startTickCnt,endTickCnt;

   for(int i=0;i<1000000;i++)
     {
      startTickCnt=GetMicrosecondCount();
      point=_Point;
      endTickCnt=GetMicrosecondCount();
      t1+=endTickCnt-startTickCnt;

      startTickCnt=GetMicrosecondCount();
      point=Point();
      endTickCnt=GetMicrosecondCount();
      t2+=endTickCnt-startTickCnt;
     }

   string str1 = "_Point: " + (string)(t1);
   string str2 = "Point(): " + (string)(t2);
   Alert(str1," | ",str2);
  }
//+------------------------------------------------------------------+
 
Aleksey Lebedev:

Немного поправил начальный скрипт, при профилировании таки ясно видно _Point быстрее.

Я думаю, что не совсем корректно замерять количество микросекунд до и после одной-единственной операции присвоения - слишком быстро она происходит (наверняка на уровне погрешности). И сколько раз Вы прогнали скрипт?

Вот замерять до и после n операций (циклами это как раз и решается), в моём последнем варианте миллиона - да, кажется уже более логичным.


P.S. Вы лучше не на первый скрипт посмотрите, а на последний. Может Вы там найдёте ошибку, которую я не вижу?

 
Sergey Eremin:

Я думаю, что не совсем корректно замерять количество микросекунд до и после одной-единственной операции присвоения - слишком быстро она происходит (наверняка на уровне погрешности). И сколько раз Вы прогнали скрипт?

да, итоговый результат некоректный в основном время выполнения GetMicrosecondCount. Прогонять смысла нет, в профилировщике посмотрите.

 

Да, в профилировщике у моего последнего скрипта такой результат (как раз только что был выдан первый):

0)0)_Point: 50983675 | Point(): 98597088 |
1)_Point: 51861700 | Point(): 98397428 |
2)_Point: 50206705 | Point(): 97734933 |
3)_Point: 50598818 | Point(): 98480134 |
4)_Point: 50679116 | Point(): 98556775 |
5)_Point: 50897861 | Point(): 99643446 |
6)_Point: 51008238 | Point(): 100550776 |
7)_Point: 52067197 | Point(): 101059095 |
8)_Point: 51511150 | Point(): 102275405 |
9)_Point: 52752728 | Point(): 105406043 |


_Point равно Point() 0 раз; _Point быстрее Point() 10 раз; _Point медленнее Point() 0 раз

Разница в 2 раза.

А теперь новый вопрос - идентична ли работа программ в обычном режиме режиму профилировщика? Т.е. там ли мы охотимся на ведьм, или для практического применения логичней изучать "обычный" режим?

В обычном режиме я получаю чертовски странный результат (Point() быстрее чем _Point), и я почти уверен, что мои программы в нормальных условиях будут работать не в том же режиме, что и под профилировщиком.

 
Sergey Eremin:

В обычном режиме я получаю чертовски странный результат (Point() быстрее чем _Point), и я почти уверен, что мои программы в нормальных условиях будут работать не в том же режиме, что и под профилировщиком.

У меня тож самое получалось и это таки странно, не может быть вызов функции быстрее присвоения значения переменной. Вопщем наверное неважно, что написано - главное, как скомпилируется)

Причина обращения: