캔버스 대 레이블

 

나는 다양한 방식으로 생성된 차트에 텍스트를 출력하기 위한 디스플레이 속도의 비교를 포럼 회원들의 주의에 제시합니다. CCanvas 클래스를 사용하여 디스플레이의 첫 번째 버전을 만들고 레이블(CChartObjectLabel)에서 만든 두 번째 버전을 만들었습니다. 모든 수업은 표준 라이브러리에서 가져왔습니다. 이 아이디어는 제가 CCanvas에서 디스플레이를 만들었을 때 떠오른 생각으로 Expert Advisor의 속도가 상당히 느려졌습니다. 동시에 일부 프로그래머는 내가 틀렸고 CCanvas가 틀렸다고 주장했습니다. 정확히 말하면 OBJ_BITMAP_LABEL은 MetaTrader에서 사용할 수 있는 차트에 정보를 표시하는 모든 방법보다 훨씬 빠르고 빠르게 작동합니다. 따라서 실험적으로 테스트하기로 결정했습니다. 그래서 진실의 순간.

CCanvas 의 출력으로 작업 표시

캔버스

동시에 CPU의 부하

CPU

CChartObjectLabel 의 출력으로 작업 표시

라벨

출력으로 표시 작업   속도 최적화 모드가 활성화된 CChartObjectLabel(아래에서 이에 대해 설명하겠습니다)

최적화된 라벨

이제 시간의 가치에 대해. Total, 이것은 이 테스트 Expert Advisor의 총 시간입니다. 최소 지연, 중간 지연최대 지연은 틱 지연 기간 입니다. 그러나 어떤 이유로 인해 코드를 확인했지만 오류가 없었지만 항상 올바르게 가져올 수 있는 것은 아닙니다. 테스터에서 GetTickCount64 함수의 작동에 관한 것입니다. 그러나 이것은 중요한 문제가 아닙니다. 가장 중요한 것은 총 시간이 표시된다는 것입니다.

이제 라벨에 표시를 최적화하는 방법에 대해 간략하게 설명하겠습니다. 사실은 텍스트가 화면에 나타나도록 하려면 특수한 라인 배열의 라인을 레이블로 출력해야 하며, 레이블은 위에서 아래로 50개 분량입니다. 그러나 마지막 행만 업데이트되면 모든 레이블을 업데이트할 필요가 없으며 이 행과 일치하는 하나의 레이블만 업데이트하면 됩니다. 최적화 모드(optimizeUpdate)를 켜고 2배 이상의 성능 향상을 얻습니다.

작업 속도 때문에 테스트 기간이 너무 짧기 때문에 레이블의 디스플레이를 더 자세히 테스트하기로 결정했습니다. 그래서 시험기간을 늘렸습니다. 그리고 다음과 같은 결과를 얻었다.

최적화 없음 optimizeUpdate: false

최적화 업데이트: 거짓

최적화를 사용하면 optimizeUpdate: true

최적화 업데이트: 참

모든 결과를 Excel에 추가했습니다.

결과 비교

첫 번째 히스토그램에는 일반적인 비교가 있고 두 번째 히스토그램에는 레이블이 있는 변형만 있습니다.

출력: CChartObjectLabel 에 생성된 디스플레이   CCanvas에서 유사한 것보다 83.7배 더 빠르게 실행할 수 있습니다. 픽셀에 대한 작업이 모든 프로그램에서 가장 비싼 것으로 간주되는 것은 당연합니다!

테스트 결과가 포함된 표를 첨부합니다. 소스는 KB에서 다운로드할 수 있습니다. https://www.mql5.com/ru/code/33898


파일:
 

비교가 터미널이 아닌 Visualizer에 있는 이유를 이해하지 못합니까?

코드를 보지 않았습니다. 이러한 작업을 위해 Canvas는 모든 "50줄"에 대해 하나로 만들어집니다.


터미널에서는 Usage-bible을 통해 측정했습니다. 방법은 큰 차이를 보이지 않습니다.

 
fxsaber :

비교가 터미널이 아닌 Visualizer에 있는 이유를 이해하지 못합니까?

Visualizer에는 Canvas의 느린 속도에 문제가 있기 때문입니다. 그리고 어떤 것을 볼 수 있습니다. 이러한 디스플레이는 CPU 시간의 50% 이상을 차지합니다. 위에서 언급했습니다! 그리고 터미널에서 모든 것을 보려면 루프에서 메서드를 호출해야 합니다. 하지만 나는 그것에 신경 쓰지 않았다. 저는 오프라인 최적화가 있는 EA를 한 주기로 실행하고 있는데, 실제로 빠른 업데이트가 포함된 이러한 디스플레이가 필요합니다. 그러나 지금은 프로젝트가 아직 완료되지 않았기 때문에 아직 발표할 준비가 되지 않았습니다.


fxsaber :

코드를 보지 않았습니다. 이러한 작업을 위해 Canvas는 모든 "50줄"에 대해 하나로 만들어집니다.

그럼 봐. 그는 거기에 혼자입니다!

 
사람들을 잘못 인도하십시오.
정말 코 닦고 싶어요, 안 그래요?
나는 당신이 이런 일을 하고 싶어할 것이라는 것을 알고 있었습니다. 그리고 나는 그런 LAZHA가 있을 것이라는 것을 알고 있었다.

비교 테스트를 준비하는 방법을 모릅니다.

 
Mihail Matkovskij :

Visualizer에는 Canvas의 느린 속도에 문제가 있기 때문입니다 . 그리고 어떤 것을 볼 수 있습니다. 이러한 디스플레이는 CPU 시간의 50% 이상을 차지합니다. 위에서 언급했습니다! 그리고 터미널에서 모든 것을 보려면 루프에서 메서드를 호출해야 합니다. 하지만 나는 그것에 신경 쓰지 않았다. 저는 오프라인 최적화가 있는 EA를 한 주기로 실행하고 있는데, 실제로 빠른 업데이트가 포함된 이러한 디스플레이가 필요합니다. 그러나 지금은 프로젝트가 아직 완료되지 않았기 때문에 아직 발표할 준비가 되지 않았습니다.


그럼 봐. 그는 거기에 혼자입니다!

음... 비주얼라이저용으로만 작성한다면 이 게임을 혼자 플레이하십시오. 열림/닫기 위치 표시를 포함하여 차트가 시각화 장치의 작업 속도를 늦춘다는 것을 들어본 적이 있습니까? 아니다

방해하지 않도록 노력하겠습니다... 각 편지에 대해 별도의 레이블을 만들고... 별도의 리소스도 만드세요...

 
Nikolai Semko :
사람들을 잘못된 길로 인도하십시오.
정말 코 닦고 싶어요, 안 그래요?
나는 당신이 이런 일을 하고 싶어할 것이라는 것을 알고 있었습니다. 그리고 나는 그런 LAZHA가 있을 것이라는 것을 알고 있었다.

비교 테스트를 준비하는 방법을 모릅니다.

님의 글에서 제가 이해한 것은 "망상", "가짜", "시험 준비를 어떻게 해야 할지 모르겠어요"라는 단어뿐입니다. 사실, 나는 그들이이 주제와 어떻게 관련되는지 이해하지 못했습니다 ... 나머지는 "절대적으로"라는 단어에서 이해하지 못합니다! 제가 이 주제를 만들었을 때, 이해하기 힘든 주장이 아니라 건설적인 비판 을 여기서 보고 싶었습니다! 그러니, 당신의 말을 설명하는 데 어려움을 겪으십시오. 그렇지 않으면 여기에 말도 안되는 내용을 게시하지 마십시오!

 
Alexey Viktorov :

음... 비주얼라이저용으로만 작성한다면 이 게임을 혼자 플레이하십시오. 열림/닫기 위치 표시를 포함하여 차트가 시각화 장치의 작업 속도를 늦춘다는 것을 들어본 적이 있습니까? 아니다

방해하지 않도록 노력하겠습니다... 각 편지에 대해 별도의 레이블을 만들고... 별도의 리소스도 만드세요...

알렉세이, 급히 알려드립니다. 물론, 당신은 Nikolai처럼 공상하는 경향이 있습니다 ... 그러나 실제로는 모든 것이 당신이 상상하는 것과 다릅니다. 다른 문제에는 다른 솔루션이 필요합니다. 당신과 Nikolai는 장점에 대한 의견을 가질 수 있습니까?!

 
Mihail Matkovskij :

님의 글에서 제가 이해한 것은 "망상", "가짜", "시험 준비를 어떻게 해야 할지 모르겠어요"라는 단어뿐입니다. 사실, 나는 그들이이 주제와 어떻게 관련되는지 이해하지 못했습니다 ... 나머지는 "절대적으로"라는 단어에서 이해하지 못합니다! 제가 이 주제를 만들었을 때, 이해하기 힘든 주장이 아니라 건설적인 비판 을 여기서 보고 싶었습니다! 그러니, 당신의 말을 설명하는 데 어려움을 겪으십시오. 그렇지 않으면 여기에 말도 안되는 내용을 게시하지 마십시오!

인내, 친구, 인내.
나는 당신만큼 시간이 없습니다. 나는 이제 마지막 학기와 동시에 세 개의 그룹 프로젝트 가 있습니다. 그래서 제가 충동적으로 여기 왔습니다.
하지만, 나는 당신이 틀렸다는 것을 확신시킬 수 있습니다. 긴장을 풀고 그렇게 긴장하지 마십시오. 그렇지 않으면 내 노력이 헛될 것입니다.
물론, 당신의 마음이 당신의 감정을 억제하는 방법을 알고 있지 않다면 말입니다.
 
Nikolai Semko :
인내, 친구, 인내.
나는 당신만큼 시간이 없습니다. 나는 이제 마지막 학기와 동시에 세 개의 그룹 프로젝트 를 가지고 있습니다. 그래서 제가 충동적으로 여기 왔습니다.
하지만, 알겠습니다. 당신의 망상을 설득할 수 있습니다. 긴장을 풀고 그렇게 긴장하지 마십시오. 그렇지 않으면 내 노력이 헛될 것입니다.

하자. 코드가 복잡하고 명확하게 합당한 주장이 필요하기 때문에 코드에서만 먼저 제대로 이해하십시오!

 

이해하지 못했습니다. 첫 번째 이미지에는 캔버스가 있고 그 위에 텍스트가 있습니다.

후속 이미지는 그래프에 동일한 텍스트가 없습니다.

즉, 그때 무엇을 비교했는가?

 
Mihail Matkovskij :

하자. 코드가 복잡하고 명확하게 합당한 주장이 필요하기 때문에 코드에서만 먼저 제대로 이해하십시오!

귀하의 코드를 "제대로" 이해할 수 없습니다. 왜냐하면 이미 보았다. 짧은 평결은 마음의 슬픔입니다.
앞으로 몇 달 안에 작성하게 될 내 코드를 더 잘 이해하게 될 것입니다.
사유: