![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
@Nikolai Semko
Nikolai, şimdi beklenmedikbir şekilde "bir tuvaliçizmek neden bu kadar uzun sürüyor" sorusunun cevabı geldi.
Pencereler iki tuvalden oluşuyor ! Bu tuvallerin boyutları neredeyse eşit. Yani çizim alanı ikiyle çarpılmalıdır. Ama bu sadece başlangıç.
Pencere alanında büyük kaydırma elemanları (V_BOX) vardır ve bunlar da tamamen orijinal renkle dolu olarak çizilir. Yani, eğer V_BOX pencerenin ana kısmını kaplıyorsa, çizim alanı üç ile çarpılmalıdır. Ama ek bir tuvali vardır. Görüntü bu tuval üzerinde kaydırılır. Elemanın tabanı sadece bir kaydırma çubuğudur. Kısacası - çizim alanı dört ile çarpılmalıdır (özellikle kaydırma çubuğu uzunsa). Ve ancak o zaman öğeler çizilir.
Hepsi bu gibi görünüyor... Bir nokta koyabiliriz.Pencerenin alanını üç veya dört ile çarparız. Ama hayır!
Öğelerin kendileri de çok katmanlıdır. Her birinin bir tabanı vardır. Taban her zaman sıfırdan çizilir, orijinal renkle doldurulur. Daha sonra çerçeveler tabanın üzerine çizilir. Daha sonra, simgeler öğenin önceden çizilmiş kısımlarının üzerine çizilir. Ve son olarak, metinler her şeyin üzerine çizilir.
Sonuç olarak, kullanıcı her bir pikselde yalnızca son rengi görür. Ancak bu pikselin bulunduğu yerde, tüm pencere çizilirken renkler birkaç kez değişmiştir.
Şimdi bunu 15 pencere ile çarpın.... Kodda özel bir hata olmadığı anlaşılıyor - çizim bloğunun parçalarının yürütülme hızını özel olarak ölçtüm ve tam ekran için 50 ms benim için de çalışıyor. Sadece çok daha fazla ekranla karşılaşıyorum.
Kodu nasıl değiştireceğime ve çizimi 2 veya 3 kat nasıl hızlandıracağıma dair bir fikrim var. Ama bunu ana çalışmadan sonra yapacağım.
Kodu kontrol etmekte ısrar ettiğin için teşekkür ederim. Haklıydınız. Eleştirinin yardımcı olduğu durum budur.
Ayrıca, metinle ilgili ipucu için @AndreyBarinov'a teşekkürler. Belki bir şeyler bulabilirim.
@Nikolai Semko
...ve 50 ms tam ekran benim için de çalışıyor. ....
Test yaklaşıktır. Neredeyse eşit boyutta üç tuval içeren bir pencereyi (simgeler penceresi) açma hızını ölçtüm ve ~70 ms elde ettim. Tüm tuvallerin alanını toplarsanız (öğeler olmadan), o zaman dizüstü bilgisayar ekranının alanı 17". Bu, tuvalin üstüne çizilen öğelerin tabanının alanını ve simgelerin kendilerini içermez. Yani evet, varsayımsal bir tam ekranın alanını renkle doldurmak için ~50 ms. Henüz tam olarak ölçmedim. Neden, "fil" odanın tam ortasındayken? :)
Aşırı yüklenmiş ve optimize edilmemiş bir arayüz olarak 50 ms'den bahsediyordum. 3-10 ms normaldir
Patates tarlasına gitmek istemeyen Stirlitz gibisin.
Çizim bloğu içindeki döngüleri derinlemesine incelemeniz gerekir. Yüzeysel profilleme tam bir resim vermez. Ancak konunun ne olduğu zaten açık. Burada yazdım #553
. Sanırım yanılmıyorum.
(çizim bloğunun taslak versiyonu, testler için kullanıyorum)...
Kodu nasıl değiştireceğime ve render işlemini 2 veya 3 kat nasıl hızlandıracağıma dair bir fikrim var. Ama bunu ana çalışmadan sonra yapacağım. ...
Görevin karmaşıklığını ve nihai sonucun değerini analiz ettim.
Evet, öncelikle tamamen işlevsel bir yazılım çıkarmak çok önemlidir.