Yayınlanan makale Geliştirmelerinizi tanıtmak için EX5 kütüphanelerini kullanın:
Yazar: Alex Sergeev
Ai maladitsa, kendini kızdırdın, kendini düzelttin, biz iyi gitmezken başka bir fiş.
Bir yıl önce ben de bundan muzdariptim, çok hevesliydim. Engel mi? Hayır, ben hiç görmedim. Belki de sadece tatil sonrası ruh halindeyim ... :(
Yerel sınıf fonksiyonlarını çağırmanın maliyeti ile karşılaştırıldığında kütüphane fonksiyonlarını çağırmanın maliyeti nedir?
Bu sadece basit bir sarmalayıcı değil, her hapşırmada kütüphaneyi çağırmak zorundasınız.
Aferin sana, altına işemişsin, kendini düzeltmişsin, biz bu kadar iyi durumda değilken bir fiş daha.
Aslında burası o kadar da kötü değil.
Bu iyi bir makale. Libleri her zaman kullanıyorum -- şu ana kadar normal kod ayrımının tek yolu bu.
Söyleseniz iyi olur -- ne zaman evrensel mega nöronlar olacak?
Urain:
Kütüphane işlevlerini çağırmanın maliyeti, yerel sınıf işlevlerini çağırmanın maliyetine kıyasla nedir?
Kontrol ettim. Hiçbir fark yok.
İçe aktarırken veya dahil ederken Test boş işlevinin bu çağrısı zamanı etkilemez.
/* #import "Graph.ex5" void Test(long achart,string name,int awnd,int ax,int ay,color aclr); #import */ #include "Graph.mq5" void OnStart() { long a=GetTickCount(); for (int i=0; i<1000000; i++) { Test(0, "qwe", 0, 10, 10, clrRed); } Print(string(GetTickCount()-a)); }
Aslında burası o kadar da kötü değil.
Makale doğru noktaya değiniyor. Kütüphaneleri her zaman kullanıyorum -- şimdiye kadar kodu düzgün bir şekilde ayırmanın tek yolu bu.
Ne zaman evrensel mega-nöronlar olacak?
Seninki ne zaman olacak?
Açıkçası, yazılarınızı biraz daha okuyacağım ve MT5'i tamamen bırakacağım.
Tüm bu koltuk değneklerinden ruhumun derinliklerine kadar bıktım, nereye dönsem her şey berbat, "ve tramvayı başlatacaklar" :)
Neuronka bir yerlerde yatıyor, eğer cidden oturacak ruh haliniz varsa, bir iş figürü kaldı, ama ruh hali yok.
Kontrol ettim. Hiçbir fark yok.
içe aktarırken veya dahil ederken boş Test'in böyle bir çağrısı süreyi etkilemez.
Dedikleri gibi, farkı hissedin:
2012.01.06 16:46:28 Hesap Makinesi(EURUSD,H1) empty=281
2012.01.06 16:46:28 Hesap Makinesi (EURUSD,H1) lib=2344
//+------------------------------------------------------------------+ //|Test.mq5 | //+------------------------------------------------------------------+ #property library void Test(long achart,string name,int &awnd,int ax,int ay,color aclr) export { awnd=ax+ay; } //+------------------------------------------------------------------+
#import "Test.ex5" void Test(long achart,string name,int &awnd,int ax,int ay,color aclr); #import void OnStart() { int res=0; long a=GetTickCount(); for(int i=0; i<100000000; i++) { Test(0,"qwe",res,10,10,clrRed); } Print("liba=",string(GetTickCount()-a)); a=GetTickCount(); for(int i=0; i<100000000; i++) { res=10+10; } Print("boş=",string(GetTickCount()-a)); }
Dedikleri gibi, farkı hisset:
Hayır, bir fonksiyon çağrısı hakkında soru soruyorsunuz, değil mi?
Yoksa döngü yürütme hızını mı kontrol etmek istiyorsunuz?
Basit bir fonksiyon çağrısı ile ex5 bible'dan bir çağrı arasındaki farkı kontrol ettim. Fonksiyon çağrılarının hızında bir fark yok.
Fonksiyon çağrısı olmayan boş bir döngünün daha hızlı çalışacağı açıktır. neden kontrol ettiniz.
Hayır, bir fonksiyon çağrısı hakkında soruyorsunuz, değil mi?
Yoksa genel olarak döngü yürütme hızını mı kontrol etmek istediniz?
Basit bir fonksiyon çağrısı veya ex5 bible'dan bir çağrı arasındaki farkı kontrol ettim. Fonksiyon çağrılarının hızında bir fark yok.
Fonksiyon çağrısı olmayan boş bir döngünün daha hızlı çalışacağı açıktır.
Döngüler aynıdır, döngülerin içinde yürütülen eylemler aynıdır (bir durumda doğrudan döngünün içinde, diğer durumda işlevin içinde) zaman farkı, lib'den işlev çağrısının net zamanını verir.
Deneyin saflığı için, benzer bir işlevi doğrudan dosyada tanımlayalım:
2012.01.06 17:18:39 Calculator (EURUSD,H1) empty=281
2012.01.06 17:18:38 Calculator (EURUSD,H1) lib=2281
//+------------------------------------------------------------------+ //|Test.mq5 | //+------------------------------------------------------------------+ #property library void Test(long achart,string name,int &awnd,int ax,int ay,color aclr) export { awnd=ax+ay; } //+------------------------------------------------------------------+
#import "Test.ex5" void Test(long achart,string name,int &awnd,int ax,int ay,color aclr); #import void Testlocal(long achart,string name,int &awnd,int ax,int ay,color aclr) { awnd=ax+ay; } void OnStart() { int res=0; int count=100000000; long a=GetTickCount(); for(int i=0; i<count; i++) { Test(0,"qwe",res,10,10,clrRed); } Print("liba=",string(GetTickCount()-a)); a=GetTickCount(); for(int i=0; i<count; i++) { Testlocal(0,"qwe",res,10,10,clrRed); } Print("boş=",string(GetTickCount()-a)); }
Hatayı ortadan kaldırmak için, döngü uzunluğunu bir değişken sayısından bile yeniden yazdım, sonuç aynı.
4.5 kez
2012.01.06 17:28:33 test (EURUSD,D1) ex5=2047
2012.01.06 17:28:31 test (EURUSD,D1) local=438
Alex bu senin için yeterli değil mi?
4 kez orada, 2 kez orada, vs.
Eğer İncillere dayanarak İnciller yazmaya başlarsak, frenler kartopu gibi büyüyecektir.
Bu şema, İncil'in kendisinin İncil çağrısını kullanmaması koşuluyla kullanılabilir.
Yukarıdaki örnekteki hız farkı, bir durumda kod iyileştiricinin bu kadar basit bir işlevi tamamen aşırı çizgilendirmesi ve işlev çağrısının kendisini bile tamamen hariç tutması, diğer durumda ise harici bir işlevi dürüstçe çağırmak zorunda kalmasından kaynaklanmaktadır.
Testlerde kod iyileştiricinin kaçınılmaz etkisini her zaman göz önünde bulundurmalısınız. Bu döngü örneği, yerel bir işlev durumunda iyi bir derleyicide res=100; şeklinde dejenere olur.
İnlining işleminden kaçınmak için çağrılan fonksiyonu büyütmeye çalışın ve tekrar test edin.
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Yeni makale EX5 Kitaplıklarını Kullanarak Geliştirme Projelerinizi Öne Çıkarın yayınlandı:
Bir .ex5 dosyasında sınıfların/fonksiyonların uygulama ayrıntılarının gizlenmesi, teknik bilgi algoritmalarınızı diğer geliştiricilerle paylaşmanıza, ortak projeler oluşturmanıza ve bunları Web'de öne çıkarmanıza olanak sağlayacaktır. Ve MetaQuotes ekibi, ex5 kitaplık sınıflarının doğrudan kalıtım olasılığını gerçekleştirmek için elinden geleni yaparken, bunu hemen şimdi uygulayacağız.
Artık başlık dosyasını ekleyebilir ve uygulamasını ortaya çıkan Uzman Danışmanımıza aktarabiliriz.
Bu, şematik olarak aşağıdaki gibi gösterilebilir:
Yazar: ---