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

 

계속해서:


어떤 라인(1, 2 또는 3)이 여전히 리소스를 많이 사용합니까?

전체 프로그램 시간의 55%를 차지하는 "무거운" iTime이 0.81% 자체 CPU만 표시하는 방법을 이해할 수 없습니다.
그리고 그 반대의 경우도 마찬가지입니다. 여는 괄호(1)와 가장 간단한 조건(2, 매우 드물게 참)이 33.84% 자체 CPU를 표시하는 이유는 무엇입니까?

자체 CPU와 총 CPU가 일치하지 않는 이유는 무엇입니까?


이 기능은 정말 무겁지만 모든 무거움은 코드 아래에 있습니다. 그리고 프로파일러는 iTime과 두 개의 부울 변수에 대한 대체품을 찾을 것을 제안합니다?!

나는 분명히 뭔가를 이해하지 못한다.

 
Andrey Khatimlianskii :

나는 분명히 뭔가를 이해하지 못한다.

미끄러질 수 있습니까?

 
Andrei Trukhanovich :

미끄러질 수 있습니까?

보고서에서 같은 숫자로 보이지 않습니다.

 
Andrey Khatimlianskii :

일리아스, 내가 알아낼 수 있게 도와줘.

1. 왜 빈 함수를 호출하면 자체 CPU의 34.5%를 차지할 수 있습니까? 동시에, 전체 CPU의 38.16%가 내부를 실행하는 그 뒤를 따르는 함수의 호출은 리포트에 전혀 표시되지 않습니까?


기능 코드:



2. 같은 예는 두 번째 문제를 보여줍니다. TimeCurrent()가 있는 행은 함수뿐만 아니라 일반적으로 프로그램 내에서도 시간이 너무 오래 걸립니다.

CheckTimeSeries() 본문을 주석 처리하기 전에 대부분의 로드는 TimeCurrent() 라인에 있었습니다.

기능이 그렇게 무거워요? 무엇으로 교체할까요? 또는 경제적으로 만드는 방법(하나의 프로그램 실행 주기 내에서 캐싱)?

가능한 한 경제적인 계산을 수행하고 계산을 얇게 합니다(막대당 한 번, X초당 한 번, Yms당 한 번 등). 그러나 계산이 필요한지 여부를 확인하는 것 자체가 리소스를 많이 사용하는 것으로 나타났습니다.


도와주셔서 감사합니다.

1) 코드가 없으면 최적화로 인해 그러한 통계가 왜 나오는지 말하기 어렵습니다.

2) 루프 전에 Timer 함수에서 시간을 가져와 매개변수로 더 전달하지 않는 이유는 무엇입니까? 루프에서 이 함수를 최소 2*N번 호출하는 요점은 무엇입니까?

 
Andrey Khatimlianskii :

계속해서:


어떤 라인(1, 2 또는 3)이 여전히 리소스를 많이 사용합니까?

전체 프로그램 시간의 55%를 차지하는 "무거운" iTime이 0.81% 자체 CPU만 표시하는 방법을 이해할 수 없습니다.
그리고 그 반대의 경우도 마찬가지입니다. 여는 브래킷(1)과 가장 단순한 조건(2, 매우 드물게 참)이 33.84% 자체 CPU를 표시하는 이유는 무엇입니까?

자체 CPU와 총 CPU가 일치하지 않는 이유는 무엇입니까?


이 기능은 정말 무겁지만 모든 무거움은 코드 아래에 있습니다. 그리고 프로파일러는 iTime과 두 개의 부울 변수에 대한 대체품을 찾을 것을 제안합니다?!

나는 분명히 뭔가를 이해하지 못한다.

1) 함수가 인라인되었다고 가정합니다.

2) 카운터가 실제로 연결되지 않았습니다. SelfCPU - 호출된 함수를 고려하지 않고 함수 코드에 대한 부하, 위 코드에서 이것은 IF 연산자(분기)입니다.

3) TotalCPU 카운터는 이 프로그램 분기의 모든 호출에 대한 실행 분기의 부하를 보여줍니다.

 

항상 100%여야 하는 것 아닌가요? 또는 @global_initializations 및 @global_deinitializations도 고려하면 약간 더 적습니다.

102% 이상이 있습니다...(이력 데이터에 대한 빌드 3003).

 
Ilyas :

1) 함수가 인라인되었다고 가정합니다.

2) 카운터가 실제로 연결되지 않았습니다. SelfCPU - 호출된 함수를 고려하지 않고 함수 코드에 대한 부하, 위 코드에서 이것은 IF 연산자(분기)입니다.

3) TotalCPU 카운터는 이 프로그램 분기의 모든 호출에 대한 실행 분기의 부하를 보여줍니다.

어떻게 유용합니까? 분명히 IF 문 자체는 CPU 사용량이 낮습니다. 함수 호출을 포함해야 하지 않습니까?

어쨌든. 이해하는 방법(Andrey의 예에서):

if(!simulated) taking 3.86% ?!?

이거 어떡해???


동일한 Tick() 함수에 있는 것 같습니다!

Profiler를 실제로 사용하고 이해하고 싶지만 모두 의미가 없습니다. 후회.

무엇을 할 것인가? 어떻게 도와드릴까요?

 
Ilyas :

1) 코드가 없으면 최적화로 인해 그러한 통계가 왜 나오는지 말하기 어렵습니다.

2) 루프 전에 Timer 함수에서시간을 가져와 매개변수로 더 전달하지 않는 이유는 무엇입니까? 루프에서 이 함수를 최소 2*N번 호출하는 요점은 무엇입니까?

답변 감사합니다!

1) 나는 그것을 심플코드로 재현할 것 같지 않다, 네. 그리고 전체 프로젝트는 줄 준비가되어 있지 않습니다.

2) 이 특별한 경우에 동의합니다.

그러나 동일하거나 유사한 검사를 사용하는 다른 클래스가 많이 있으며 TimeCurrent 또는 GetTickCount는 필수 불가결합니다.
동일한 값을 여러 번 요청하지 않도록 호출을 최적화하는 방법은 무엇입니까?

그리고 TimeCurrent가 실제로 너무 무거워서 계산이 정말 많은 배경에서도 눈에 띌 수 있습니까(1~5분에 한 번씩 수행되지만)?
아니면 제가 또 잘못 이해해서 전체 CPU의 38.16% / Self CPU의 26.07%를 if 체크 자체( TimeCurrent 함수 호출 제외)가 차지한 건가요? 그런데 이게 왜 그럴까요?


일리아스 :

1) 함수가 인라인되었다고 가정합니다.

2) 카운터가 실제로 연결되지 않았습니다. SelfCPU - 호출된 함수를 고려하지 않고 함수 코드에 대한 부하, 위 코드에서 이것은 IF 연산자(분기)입니다.

3) TotalCPU 카운터는 이 프로그램 분기의 모든 호출에 대한 실행 분기의 부하를 보여줍니다.

1) 왜 이렇게 과식하는 여는 브래킷을 이해하는 데 도움이되지 않습니다. 어떻게 해석할까요?

2) 이제 SelfCPU 정보가 명확해졌습니다. 감사합니다. 이것은 호출된 함수를 고려하지 않은 함수 코드에 대한 부하입니다.

이것은 또한 iTime 라인의 낮은 SelfCPU를 설명합니다. 매우 드물게 도달했으며 거의 호출되지 않았습니다.

그런데 왜 이렇게 큰 TotalCPU가 있습니까? 아니면 전체 프로그램에서 모든 iTime(및 기타 CopyXXX 기능?)의 로드를 표시합니까?

 
Andrey Khatimlianskii :

답변 감사합니다!

1) 나는 그것을 심플코드로 재현할 것 같지 않다, 네. 그리고 전체 프로젝트는 줄 준비가되어 있지 않습니다.

2) 이 특별한 경우에 동의합니다.

그러나 동일하거나 유사한 검사를 사용하는 다른 클래스가 많이 있으며 TimeCurrent 또는 GetTickCount는 필수 불가결합니다.
동일한 값을 여러 번 요청하지 않도록 호출을 최적화하는 방법은 무엇입니까?

그리고 TimeCurrent가 실제로 너무 무거워서 계산이 정말 많은 배경에서도 눈에 띌 수 있습니까(1~5분에 한 번씩 수행되지만)?
아니면 제가 또 잘못 이해해서 전체 CPU의 38.16% / Self CPU의 26.07%를 if 체크 자체( TimeCurrent 함수 호출 제외)가 차지한 건가요? 그런데 이게 왜 그럴까요?


1) 왜 이렇게 과식하는 여는 브래킷을 이해하는 데 도움이되지 않습니다. 어떻게 해석할까요?

2) 이제 SelfCPU 정보가 명확해졌습니다. 감사합니다. 이것은 호출된 함수를 고려하지 않은 함수 코드에 대한 부하입니다.

이것은 또한 iTime 라인의 낮은 SelfCPU를 설명합니다. 매우 드물게 도달했으며 거의 호출되지 않았습니다.

그런데 왜 이렇게 큰 TotalCPU가 있습니까? 아니면 전체 프로그램에서 모든 iTime(및 기타 CopyXXX 기능?)의 로드를 표시합니까?

표준 배포판에서 아무 코드나 가져와서 프로파일링하고 이를 기반으로 질문하십시오. 이를 통해 상황을 재현 가능하게 평가하고 정확한 답변을 제공할 수 있습니다.

그렇지 않으면 코드의 작은 부분이 프로파일러 보고서를 담당하는 것은 좋지 않습니다. 모든 코드를 완전히 다른 뒤죽박죽 인라인 표현으로 바꾸는 거대한 최적화 작업이 있습니다.


정보: 신은 100명 중 1명의 C++ 프로그래머가 프로파일러를 사용하는 방법과 보고서를 이해하는 것을 금합니다. 네이티브 코드 최적화 프로그램을 탓하세요.

 
Alain Verleyen :

어쨌든. 이해하는 방법(Andrey의 예에서):

if(!simulated) taking 3.86% ?!?

예, 외부 기능 호출을 고려하지 않고 SelfCPU는 그다지 유익하지 않습니다. 기본 MQL 기능이 사용되는 가장 낮은 수준에서만 실제 부하를 볼 수 있습니다.
그러나 동시에 이러한 함수가 더 자주 호출되는(그리고 더 많이 소비하는) 위치와 단일 호출이 수행되는 위치가 명확하지 않습니다! 글쎄요, CopyXXX와 OrderXXX 함수가 가장 많은 시간이 걸린다는 것을 아는 제가 무슨 소용이 있습니까? 내 프로그램의 어느 부분에서 너무 자주/비효율적으로 호출되는지 알아야 합니다.

아마 이 모드에서 TotalCPU와 함께 사용합니다. 나는 공부할 것이다. 그러나 내가 거기에서 완전히 주석 처리 된 줄 (!)을 보는 동안.