Tuval ve Etiketler

 

Forum üyelerinin dikkatine, farklı şekillerde oluşturulan grafiğe metin çıktısı vermek için ekranların hızlarının bir karşılaştırmasını sunuyorum. Ekranın ilk versiyonunu CCanvas sınıfını, ikincisini ise etiketler üzerinde oluşturduğum (CChartObjectLabel) kullanarak yaptım. Tüm dersler standart kütüphaneden alınmıştır. Bu fikir bana CCanvas'ta bir ekran oluşturduğumda geldi ve Uzman Danışmanımı önemli ölçüde yavaşlattı. Aynı zamanda, bazı programcılar yanıldığımı iddia ettiler ve CCanvas ve kesin olmak gerekirse, OBJ_BITMAP_LABEL çok hızlı çalışıyor, MetaTrader'da bulunan çizelgedeki bilgileri görüntülemenin tüm yollarından daha hızlı. Bu nedenle deneysel olarak test etmeye karar verdim. Yani, hakikat anı.

CCanvas'ta çıktılı görüntüleme işlemi

Tuval

Aynı anda CPU üzerindeki yük

İşlemci

CChartObjectLabel'de çıktılı görüntüleme işlemi

Etiketler

Çıkış ile görüntüleme işlemi   Hız optimizasyonu modu etkinken CChartObjectLabel (bundan aşağıda bahsedeceğim)

Etiketler Optimize Edildi

Şimdi zamanın değerleri hakkında. Toplam, bu testin toplam süresi Expert Advisor'dır. Min gecikme, Orta gecikme ve Maks gecikme, tik gecikme süreleridir . Ancak bazı nedenlerden dolayı bunları doğru bir şekilde elde etmek her zaman mümkün değildir, ancak kod kontrol edilmesine rağmen hata yoktur. Bence bu tamamen test cihazındaki GetTickCount64 işlevinin çalışmasıyla ilgili... Ama bu önemli bir sorun değil. Ana şey, toplam sürenin gösterilmesidir.

Şimdi size kısaca etiketlerde gösterimi optimize etmekten bahsedeceğim. Gerçek şu ki, metnin ekranda görünmesi için, özel bir satır dizisinden satırları, yukarıdan aşağıya 50 adet miktarında bulunan etiketlere çıkarmanız gerekir. Ancak sadece son satır güncellendiğinde tüm etiketlerin güncellenmesi gerekmez, bu satıra uyan sadece bir etiketin güncellenmesi yeterlidir. Optimizasyon modunu (optimizeUpdate) açıyoruz ve 2 kattan fazla performans artışı elde ediyoruz.

Çalışma hızından dolayı bu test süresi onun için çok kısa olduğundan, etiketlerdeki ekranı daha ayrıntılı olarak test etmeye karar verdim. Bu nedenle test süresini uzattım. Ve aşağıdaki sonuçları aldım.

optimizasyon optimizeUpdate olmadan: false

optimizeGüncelleme: yanlış

Optimizasyon optimizasyonu ile Güncelleme: true

optimizeGüncelleme: doğru

Tüm sonuçlar excel'e eklendi

sonuçların karşılaştırılması

İlk histogramda genel bir karşılaştırma var, ikincisinde sadece etiketli varyant var.

Çıktı: CChartObjectLabel üzerinde oluşturulan görüntü   CCanvas'taki benzerinden 83,7 kat daha hızlı çalışabilir. Pikseller üzerindeki işlemlerin tüm programlarda en pahalı olarak kabul edilmesine şaşmamalı!

Ekli, test sonuçlarını içeren bir tablodur. Kaynaklar KB olarak indirilebilir: https://www.mql5.com/ru/code/33898


Dosyalar:
 

Karşılaştırmanın neden Terminalde değil de Görselleştiricide olduğunu anlamıyorum?

Koda bakmadım. Bu tür görevler için Canvas, tüm "50 satır" için bir tane yapılır.


Terminalde, Kullanım İncil'i aracılığıyla ölçtüm. Yöntemler önemli bir fark göstermez.

 
fxsaber :

Karşılaştırmanın neden Terminalde değil de Görselleştiricide olduğunu anlamıyorum?

Çünkü Görüntüleyicide, Canvas'ın yavaş hızıyla ilgili sorunlar var. Ve hangileri olduğunu görebilirsiniz. Böyle bir ekran CPU zamanının %50'sinden fazlasını tüketir, bundan yukarıda bahsetmiştim! Ve Terminal'de, her şeyi görmek için yöntemleri bir döngüde çağırmanız gerekir. Ama onunla uğraşmadım. Bir döngüde çalışan çevrimdışı optimizasyona sahip bir EA'm var, aslında böyle bir ekranın hızlı bir güncellemeye ihtiyacı var. Ancak proje henüz tamamlanmadığı için henüz sunmaya hazır değilim.


fxsaber :

Koda bakmadım. Bu tür görevler için Canvas, tüm "50 satır" için bir tane yapılır.

Sonra bak. O orada yalnız!

 
İnsanları yoldan çıkar.
Gerçekten burnumu silmek istiyorum, değil mi?
Böyle bir şey yapmak isteyeceğini biliyordum. Ve böyle bir LAZHA olacağını biliyordum.

Karşılaştırmalı testler hazırlamayı bilmiyorsunuz.

 
Mihail Matkovskij :

Çünkü Görüntüleyicide sadece Canvas'ın yavaş hızıyla ilgili sorunlar var . Ve hangileri olduğunu görebilirsiniz. Böyle bir ekran CPU zamanının %50'sinden fazlasını tüketir, bundan yukarıda bahsetmiştim! Ve Terminal'de, her şeyi görmek için bir döngüde yöntemleri çağırmanız gerekir. Ama onunla uğraşmadım. Bir döngüde çalışan çevrimdışı optimizasyona sahip bir EA'm var, aslında böyle bir ekranın hızlı bir güncellemeye ihtiyacı var. Ancak proje henüz tamamlanmadığı için henüz sunmaya hazır değilim.


Sonra bak. O orada yalnız!

Şey... sadece bir görselleştirici için yazıyorsan, o zaman bu oyunları tek başına oyna. Herhangi bir grafiğin, hatta açılış/kapanış pozisyonlarının işaretlerinin bile görselleştiricinin çalışmasını yavaşlattığını duydunuz mu? Değil

Sizi rahatsız etmemeye çalışacağım… her harf için ayrı etiketler oluşturun… ve ayrıca ayrı bir kaynak…

 
Nikolai Semko :
İnsanları yoldan çıkar.
Gerçekten burnumu silmek istiyorum, değil mi?
Böyle bir şey yapmak isteyeceğini biliyordum. Ve böyle bir LAZHA olacağını biliyordum.

Karşılaştırmalı testler hazırlamayı bilmiyorsunuz.

Yazınızdan anladığım tek şey "hayal", "SAHTE", "Test hazırlamayı bilmiyorum". Doğru, bu konuyla nasıl ilgili olduklarını anlamadım ... Gerisi, "kesinlikle" kelimesinden anlamıyorum! Bu konuyu oluşturduğumda, burada bir yığın anlaşılmaz iddia değil, yapıcı eleştiri görmek istedim! Öyleyse, sözlerini açıklama zahmetine gir. Aksi takdirde, burada saçmalık yayınlamayın!

 
Alexey Viktorov :

Şey... sadece bir görselleştirici için yazıyorsan, o zaman bu oyunları tek başına oyna. Herhangi bir grafiğin, hatta açılış/kapanış pozisyonlarının işaretlerinin bile görselleştiricinin çalışmasını yavaşlattığını duydunuz mu? Değil

Sizi rahatsız etmemeye çalışacağım… her harf için ayrı etiketler oluşturun… ve ayrıca ayrı bir kaynak…

Seni bilgilendirmek için acele ediyorum, Alexey. Tabii ki, Nikolai gibi hayal kurmaya meyillisiniz ... Ama gerçekte her şey hayal ettiğiniz gibi değil. Sadece farklı problemler farklı çözümler gerektirir. Sen ve Nikolai esas hakkında yorum yapacak mısınız?!

 
Mihail Matkovskij :

Yazınızdan anladığım tek şey "hayal", "SAHTE", "Test hazırlamayı bilmiyorum". Doğru, bu konuyla nasıl ilgili olduklarını anlamadım ... Gerisi, "kesinlikle" kelimesinden anlamıyorum! Bu konuyu oluşturduğumda, burada bir yığın anlaşılmaz iddia değil, yapıcı eleştiri görmek istedim! Öyleyse, sözlerini açıklama zahmetine gir. Aksi takdirde, burada saçmalık yayınlamayın!

Sabır dostum sabır.
Senin kadar vaktim yok. Şimdi son dönem ve paralel olarak üç grup projem var. Bu yüzden dürtüsel olarak buradayım.
Ama tamam, seni yanıldığına ikna edebilirim, sadece rahatla ve bu kadar zorlama. Aksi takdirde, çabalarım boşuna olacaktır.
Tabii zihniniz duygularınızı nasıl bastıracağını bilmiyorsa.
 
Nikolai Semko :
Sabır dostum sabır.
Senin kadar vaktim yok. Şimdi son dönem ve paralel olarak üç grup projem var. Bu yüzden dürtüsel olarak buradayım.
Ama, tamam, seni hayalin konusunda ikna edebilirim, sadece rahatla ve bu kadar zorlama. Aksi takdirde, çabalarım boşuna olacaktır.

Haydi. Sadece kodda, önce doğru bir şekilde anlayın, çünkü kod karmaşık bir şeydir ve açıkça gerekçeli iddialara ihtiyacım var!

 

anlamadım İlk görüntünün bir tuvali var ve üzerinde metin var.

Sonraki görüntüler grafikte aynı metne sahip değil.

Yani, o zaman ne karşılaştırıldı?

 
Mihail Matkovskij :

Haydi. Sadece kodda, önce doğru bir şekilde anlayın, çünkü kod karmaşık bir şeydir ve açıkça gerekçeli iddialara ihtiyacım var!

Kodunuzu "düzgün" anlamayacağım. Çünkü zaten baktı. Kısa karar, akıldan gelen kederdir.
Önümüzdeki birkaç ay içinde yazacağım kodumu daha iyi anla.