MT5 코드 프로파일러 정보 - 페이지 5

 
나를 혼란스럽게 만드는 유일한 것은 두 번째 슬립입니다. 다른 모든 것은 유효합니다.

알아내자
 
Renat Fatkhullin # :
나를 혼란스럽게 만드는 유일한 것은 두 번째 슬립입니다. 다른 모든 것은 유효합니다.

분명히 프로파일러는 몇 밀리초보다 빠르게 실행되는 코드의 속도를 높이는 목적에는 적합하지 않습니다.

 
#include <fxsaber\Usage\Usage.mqh> // https://www.mql5.com/ru/code/33875

const bool Init = EventSetMillisecondTimer ( 1 );

void Sleep2( uint Interval )
{
   const ulong StartTime = GetMicrosecondCount ();
  
  Interval *= 1000 ;
  
   while ( GetMicrosecondCount () - StartTime < Interval)
    ;
}

#define Sleep Sleep2

void f()
{
   Sleep ( 10 );
}

void OnTimer ()
{
  _USAGE
  
  f();
  
   Sleep ( 20 );
}

EA는 30ms 동안 슬립 상태에 있으며 프로파일러는 3개의 덧셈과 2개의 곱셈이 있는 함수에 최대 13%가 있음을 보여줍니다!


그리고 다음은 b2593이 보여주는 것입니다.

거기 제로! 왜냐하면 실제로는 0이 있기 때문입니다. 또한 두 번째 보고서에 따르면 모든 것이 매우 명확합니다.


맹세하지 말고 개선하기 위해 이해합시다.

 
fxsaber # :

프로파일러는 그 중 13%가 3개의 덧셈과 2개의 곱셈 이 있는 함수에 있음을 보여줍니다!

그래서 나는 60%로 추정되는 프로파일링이 "3 추가 및 2"에 있을 때 OnTick에서 완전한 통과가 평균 3ms(많은 계산 및 거래 환경 작업이 있음)가 걸리는 전투 고문이 어떤 이유로 곱하기". 그러한 간결한 예를 보기 위해 여기까지 왔습니다.


MT5에서 이전 프로파일러를 사용하고 싶지만 여기서는 빌드로 그런 춤을 추어야 합니다. 여전히 실행에 실패했습니다.

 
fxsaber # :

간단한 예제를 사용하여 프로파일러 데이터의 해석을 도와주시기 바랍니다.


모든 것이 미친 헛소리처럼 보입니다.

  • 수면(2)이 완전히 누락되었습니다.
  • 어떤 이유로 USAGE는 Sleep(1)보다 몇 배나 더 오래 살아남습니다.


열심히 들어가려고 하는데 아직 안나오네요.


ZY 수면 교체를 시도했습니다.

이해할 수 없는 모든 프로파일러 값도 있습니다.

통화 보고서에는 무엇이 있습니까?

주어진 코드가 스크린샷의 보고서와 일치하지 않는다는 인상을 받았습니다.
프로파일러가 실행되는 동안 코드를 정확히 수정하지 않았습니까?

 
Ilyas # :

통화 보고서에는 무엇이 있습니까?

주어진 코드가 스크린샷의 보고서와 일치하지 않는다는 인상을 받았습니다.
프로파일러가 실행되는 동안 코드를 정확히 수정하지 않았습니까?

통치하지 않았습니다.


 2021.09 . 10 11 : 46 : 48.616 MQL5 profiler   8064 total measurements, 0 / 0 errors, 2014 kb of stack memory analyzed ( 11256 / 1073741824 )
2021.09 . 10 11 : 46 : 48.616 MQL5 profiler   49442 total function frames found ( 9141 mql5 code, 6461 built-in, 11590 other, 22250 system)
 

프로파일러의 결과를 해독하는 데 도움을 요청합니다.

 #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

void OnStart ()
{   
   double Res = 0 ;
   const int Total = OrdersHistoryTotal();
  
   for ( int i = 0 ; i < Total; i++)
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY))
      Res += OrderProfit();      
}
MQL 프로파일러 보고서 - \MQL5\Experts\Test19.mq5
기능 라인 총 CPU 백분율 자체 CPU 백분율
MT4ORDERS::GetHistoryPositionData 1093 7
50.00%
2
14.29%
MT4ORDERS::Order.CloseTimeMsc = ::HistoryDealGetInteger(티켓, DEAL_TIME_MSC); 1109 하나
12.50%
하나
50.00%
} 1360 하나
12.50%
하나
50.00%
return(티켓 && ((::HistoryOrderGetInteger(티켓, ORDER_TICKET) == 티켓) || 824 2
25.00%
0
0.00%
WHILE(_B2(MT4ORDERS::HistorySelectOrder(OrderTicket))) // https://www.mql5.com/ru/forum/304239#comment_10710403 1151 하나
12.50%
0
0.00%
시작 시간 = ::GetMicrosecondCount(); 1370 하나
12.50%
0
0.00%
더블 OrderPriceOpen = ::HistoryOrderGetDouble(주문 티켓, ORDER_PRICE_OPEN); 1182 하나
12.50%
0
0.00%
MT4ORDERS::Order.TicketID = ::HistoryDealGetInteger(MT4ORDERS::Order.Ticket, DEAL_POSITION_ID); 1096 하나
12.50%
0
0.00%
CHashMap<ulong,ulong>::크기 조정 514 하나
7.14%
하나
7.14%
m_entries[i].next = m_buckets[버킷]; 526 하나
12.50%
하나
100.00%
ArrayFill(m_buckets,0,new_size,-1); 518 7
87.50%
0
0.00%
@global_initializations 하나
7.14%
하나
7.14%
클래스 MT4HISTORY 428 하나
50.00%
하나
100.00%
정적 상수 부울 MT4ORDERS::IsTester = ::MQLInfoInteger(MQL_TESTER); 2496 하나
50.00%
0
0.00%
MT4HISTORY::새로고침 히스토리 588 6
42.86%
0
0.00%
this.Tickets[this.Amount - 1] = (long)TicketDeal; 626 2
28.57%
0
0.00%
if (_B2(::HistorySelect(0, INT_MAX))) 590
42.86%
0
0.00%
::HistoryDealGetInteger((TicketDeal = ::HistoryDealGetTicket(this.LastTotalDeals)), DEAL_TIME_MSC) : LONG_MAX; 636 하나
14.29%
0
0.00%
return(!::HistoryOrderGetInteger(티켓, ORDER_POSITION_ID) || (::HistoryOrderGetDouble(티켓, ORDER_VOLUME_CURRENT) && 660 하나
14.29%
0
0.00%
CHashMap<ulong,ulong>::추가 294 하나
7.14%
0
0.00%
크기 조정(new_size); 600 하나
50.00%
0
0.00%
if((후보 % 제수) == 0) 40 하나
50.00%
0
0.00%
시작하다 열셋
92.86%
0
0.00%
_B2(this.RefreshHistory()); 763 6
40.00%
0
0.00%
_BV2(MT4ORDERS::GetHistoryPositionData(티켓)) 1872년 7
46.67%
0
0.00%
return(_B2(MT4ORDERS::MT4OrderSelect(인덱스, 선택, 풀))); 2588 2
13.33%
0
0.00%



MQL 프로파일러 보고서 - \MQL5\Experts\Test19.mq5
기능 라인 총 CPU 백분율 자체 CPU 백분율
HistoryOrderGetInteger
21.43%
21.43%
WHILE(_B2(MT4ORDERS::HistorySelectOrder(OrderTicket))) // https://www.mql5.com/ru/forum/304239#comment_10710403 1151 하나
7.14%
21.43%
return(티켓 && ((::HistoryOrderGetInteger(티켓, ORDER_TICKET) == 티켓) || 824 2
14.29%
21.43%
기록선택
21.43%
21.43%
if (_B2(::HistorySelect(0, INT_MAX))) 590
21.43%
21.43%
HistoryOrderGetDouble 2
14.29%
2
14.29%
더블 OrderPriceOpen = ::HistoryOrderGetDouble(주문 티켓, ORDER_PRICE_OPEN); 1182 하나
7.14%
2
14.29%
return(!::HistoryOrderGetInteger(티켓, ORDER_POSITION_ID) || (::HistoryOrderGetDouble(티켓, ORDER_VOLUME_CURRENT) && 660 하나
7.14%
2
14.29%
MT4ORDERS::GetHistoryPositionData 1093 7
50.00%
2
14.29%
_BV2(MT4ORDERS::GetHistoryPositionData(티켓)) 1872년 7
50.00%
2
14.29%
GetMicrosecondCount 하나
7.14%
하나
7.14%
시작 시간 = ::GetMicrosecondCount(); 1370 하나
7.14%
하나
7.14%
CHashMap<ulong,ulong>::크기 조정 514 하나
7.14%
하나
7.14%
크기 조정(new_size); 600 하나
7.14%
하나
7.14%
HistoryDealGetInteger 하나
7.14%
하나
7.14%
::HistoryDealGetInteger((TicketDeal = ::HistoryDealGetTicket(this.LastTotalDeals)), DEAL_TIME_MSC) : LONG_MAX; 636 하나
7.14%
하나
7.14%
@global_initializations 하나
7.14%
하나
7.14%
CHashMap<ulong,ulong>::추가 294 하나
7.14%
0
0.00%
this.Tickets[this.Amount - 1] = (long)TicketDeal; 626 하나
7.14%
0
0.00%
무효 OnStart() 열셋
92.86%
0
0.00%
MT4HISTORY::새로고침 히스토리 588 6
42.86%
0
0.00%
_B2(this.RefreshHistory()); 763 6
42.86%
0
0.00%
 
fxsaber # :

프로파일러의 결과를 해독하는 데 도움을 요청합니다.

명확하지 않은 것은 무엇입니까?

나는 일반적으로 총 CPU를 기준으로 정렬하고 프로그램 전체의 속도를 저하시키는 요인을 확인합니다. 그것은 유용합니다.

역사상 5700건의 주문이 있었고, 첫 출시 때 거의 빈 보고서를 받았고 다음과 같이 받았습니다.

무엇보다도 그들은 HistoryDealGetInteger(모든 호출이 36% 차지)와 HistorySelect(27%)를 먹습니다. 그런 다음 HistoryOrderGetInteger(18%) 및 global_initialization(9%)이 제공됩니다.

나머지 10%는 나머지 코드로 이동했습니다.


그러나 이렇게 빠른 단일 실행에서는 결과를 볼 가치가 없습니다. IMHO.

 
Andrey Khatimlianskii # :

명확하지 않은 것은 무엇입니까?

해석상의 문제. 무엇을, 어디서, 어떻게 감속하는지에 대한 이해가 없습니다.

나는 일반적으로 총 CPU를 기준으로 정렬하고 프로그램 전체의 속도를 저하시키는 요인을 확인합니다. 그것은 유용합니다.

5,700건의 주문이 기록된 상태에서 첫 실행에서 거의 빈 보고서를 받았고 다음은 다음과 같습니다.

무엇보다도 그들은 HistoryDealGetInteger(모든 호출이 36% 차지)와 HistorySelect(27%)를 먹습니다. 그런 다음 HistoryOrderGetInteger(18%) 및 global_initialization(9%)이 제공됩니다.

나머지 10%는 나머지 코드로 이동했습니다.

자세한 답변 감사합니다. 왜 45% 라인과 나머지는 고려되지 않았는지 이해하지 못했습니다.

 
Andrey Khatimlianskii # :

그러나 이렇게 빠른 단일 실행에서는 결과를 볼 가치가 없습니다. IMHO.

큰 이야기에 20회 반복을 추가했습니다.

29.41%(무엇으로부터 명확하지 않음)는 반환 후 메서드의 닫는 괄호에 해당합니다. 해석하기 어렵습니다.

사유: