캔버스 대 레이블 - 페이지 9

 
레이블에 대한 텍스트 출력은 캔버스에 대한 출력보다 100배 더 빠릅니다. 캔버스가 지워지지도 않았지만 텍스트에 텍스트를 조각했다는 사실에도 불구하고 말입니다.
 
Alexey Viktorov :

드미트리, 무언가를 판단하기 전에 모든 것이 어떻게 시작되었는지 이해해야합니다 ...

내가 틀리지 않았다면, 어딘가에 50줄 정도라고 되어 있었다...

어디에서 시작되었나요? 현실과 동떨어져?

 
Dmitry Fedoseev :
레이블에 대한 텍스트 출력은 캔버스에 대한 출력보다 100배 더 빠릅니다. 캔버스가 지워지지도 않았지만 텍스트에 텍스트를 조각했다는 사실에도 불구하고 말입니다.

곧 나는 Canvas가 충분히 빠른 테스트를 제시할 것입니다. 또한 해당 소스 코드를 KB로 업데이트하겠습니다. 나중에 알게 된 것처럼 단위 시간당 업데이트 수를 제한하는 것입니다. 위의 게시물을 참조하십시오. 거기에서 논의되었습니다. 이 게시물로 시작하세요: https://www.mql5.com/en/forum/364640/page6#comment_21290218 .

 
Mihail Matkovskij :

곧 나는 Canvas가 충분히 빠른 테스트를 제시할 것입니다. 또한 해당 소스 코드를 KB로 업데이트하겠습니다. 나중에 알게 된 것처럼 단위 시간당 업데이트 수를 제한하는 것입니다. 위의 게시물을 참조하십시오. 거기에서 논의되었습니다. 이 게시물로 시작하십시오: https://www.mql5.com/en/forum/364640/page6#comment_21290218 .

그리고 환상은 아니지만 실제로 사용하게 될 코드의 작업량을 측정해 보겠습니다. 그리고 나는 무엇을 어디에서 그리든 절대 신경 쓰지 않고 프로그램의 마지막 시간을 측정합니다.

 
레이블에 대한 텍스트 출력과 비교하여 TextOut()에 대한 단 한 번의 호출만을 순수하게 어리석게 비교하더라도 70배 느립니다.
 
Dmitry Fedoseev :

그리고 환상은 아니지만 실제로 사용하게 될 코드의 작업량을 측정해 보겠습니다.

드미트리 페도세예프 :
레이블에 대한 텍스트 출력과 비교하여 TextOut()에 대한 단 한 번의 호출만을 순수하게 어리석게 비교하더라도 70배 느립니다.

원하지 않거나 이해할 수 없다면 견적을 드립니다.

레나트 파트훌린 :

Nikolai의 말이 맞습니다. 레이블 속성 편집은 레이블 렌더링과 관련이 없습니다.

차트의 다른 개체와 마찬가지로 레이블은 MQL5 프로그램의 작동과 관계없이 완전히 다른 스레드에서 그려집니다. 로봇은 차트에 강제로 다시 그리도록 요청할 수만 있지만 그리는 시간은 측정할 수 없습니다. 개체로 차트를 그리는 것은 완전히 비동기식입니다.

그러나 캔버스에 그리는 것은 로봇 스레드에서 직접 수행되기 때문에 측정하기 쉽고 차트를 독립적으로 그리는 동안 완성된 비트맵의 기본 BitBlit을 창 컨텍스트로 만드는 작업이 남아 있습니다. 이 작업은 기본적이며 비디오 카드에 의해 잘 가속화됩니다.

텍스트 레이블에서 TTF 글꼴의 SetFont/TextOut은 상당히 비쌉니다.
 
Mihail Matkovskij :

원하지 않거나 이해할 수 없는 경우 견적이 있습니다.

나는 이미 여기에서 당신에게 대답했습니다

 
Dmitry Fedoseev :

나는 이미 여기에서 당신에게 대답했습니다

MetaQuotes의 이사와 논쟁하시겠습니까?

 
Mihail Matkovskij :

MetaQuotes의 이사와 논쟁하시겠습니까?

우리는 이견이 없습니다.

 
Dmitry Fedoseev :
레이블에 대한 텍스트 출력과 비교하여 TextOut()에 대한 단 한 번의 호출만을 순수하게 어리석게 비교하더라도 70배 느립니다.

차트가 별도의 스레드에서 그려지기 때문입니다. OBJ_BITMAP_LABEL 에 대한 픽셀 배열을 사용하는 응용 프로그램과 동일한 스레드에서 처리하고 픽셀을 비트맵에 전달하는 동안. 따라서 OBJ_BITMAP_LABEL 은 응용 프로그램의 속도를 늦출 수 있지만 비트맵을 너무 자주 업데이트하지 않으면 크게 느려지지는 않습니다. 내 이전 테스트 에서 OBJ_BITMAP_LABEL 은 같은 이유로 상당한 속도 저하를 보였습니다. 그러나 비트맵 업데이트 빈도를 제한하면 레이블을 사용하는 것보다 결과가 훨씬 좋습니다. 그리고 레이블 업데이트 빈도를 제한하면 OBJ_BITMAP_LABEL보다 약간 더 빠르게 작동합니다(별도의 스레드에서 그리기 때문에). 간단히 말해서, 인간의 눈이 인식할 수 있는 것보다 더 자주 객체를 업데이트하는 것은 의미가 없습니다. 따라서 브레이크, 차트의 모든 개체는 너무 자주 업데이트됩니다.

사유: