Parıltı ve sefalet OOP - sayfa 7

 

Bulundu! OOP hızının daha yüksek olması ile hepsini aynı şekilde almak mümkün oldu. Evet! Faydaları yadsınamaz.


 
dimeon :

O zaman her şeyi assembler'da yazalım. Her iki şekilde de daha hızlı olacaktır.

Ben sorunun özünü anlamıyorum. HİÇ 1 MB kodlu bir Uzman Danışman veya gösterge görmedim.

Herhangi bir işlevin çağrılması da biraz zaman alır. Fonksiyonlardan kurtulalım!

OOP ile büyük projeler üzerinde kontrol çok daha uygundur.

Ek olarak, kod yürütme hızı çoğu zaman aracıya ping süresi ve aracının siparişe verdiği yanıt kadar kritik değildir.

HFT algoritmalarına bakın. Maksimum performans gerektirirler, ancak orada karmaşık hesaplamalar bulamazsınız.

not. A Noktasından B Noktasına gitmek için, kural olarak, bir süper arabaya veya bir BELAZ kariyerine ihtiyacınız yoktur. Yeter moped!

Burada bir fonksiyon yerine bir çerçeve var, bir dosyaya kod yazar ve dahil eder.
 
Integer :

Bulundu! OOP hızının daha yüksek olması ile hepsini aynı şekilde almak mümkün oldu. Evet! Faydaları yadsınamaz.

Peki kod neydi?
 
meat :
Peki kod neydi?
Her parametre sayısı için kendi durumu veya OOP varyantındaki her parametre sayısı için kendi sınıfı için farklı sayıda parametreyle iCustom()'u arayın .
 

MQL derleyicisinin yeni derlemesinde, sanal yöntemler zincirindeki son yöntemse ve harici kitaplıklara bağlantı yoksa, sanal yöntemi doğrudan çağrıyla değiştirme optimizasyonunu zaten etkinleştirdik.

Bu yöntem, sınıflarla çalışan birçok programa yapılan sanal çağrıları basitleştirecek ve hızlandıracaktır.

670 derlemesindeki ilk gönderiden test.mq4 örneğinin sonuçları:

 switch : 172
OOP:     312

32-64 ms'lik yetersiz zaman ölçümleriyle çalışmamak için döngünün 10.000.000'dan 50.000.000'a çıkarılması gerekiyordu. Gösterilen süre ms cinsindendir, sayı ne kadar düşükse kod o kadar hızlıdır.

İşte aynı koddaki yeni derleyicide olanlar:

 switch : 157
OOP:     93

OOP bir patlama ile kazandı. Ama neden?

İlk olarak, sanal yöntem normal bir yönteme dönüştürüldü ve daha sonra satır içi ve sıfıra optimize edildi. Aslında, işlev çağrısı ve gövde tamamen gitti ve temiz bir döngü bıraktı:

  mov     int [i] <- int [ 0 ]

$label:
                                        <- тут когда-то было тело, но оно оптимизировалось в ноль
  add     int [i] <- int [i], int [ 1 ]
  jlt     int [i], int [ 50000000 ] --> $label

Yeni konsol derleyici betası da dahil olmak üzere dosyalar eklenmiştir. Herhangi bir örneği, meta düzenleyicinin (derleyici yerleşiktir) ve konsol derleyicisinin normal 670 yapısını kullanarak karşılaştırabilirsiniz.


Bu neyi kanıtlıyor:

  1. Test edilen derleyici optimize edicinin kalitesidir.
  2. Testlerin aslında her şeyin nasıl optimize edildiğinin tam olarak anlaşılmasıyla yazılması gerekir.
  3. Dediğim gibi - mevcut bir örnekte kod optimizasyonunun özelliklerini bilmiyorsanız nasıl yanlış yönlendirilebileceğinizi (OOP aniden kazandı) gösterdim
Dosyalar:
test.mq4  9 kb
Test.ex4  7 kb
mql_exe.zip  1117 kb