Değişkenleri bir döngünün arkasında mı yoksa bir döngünün içinde mi bildiriyorsunuz? - sayfa 4
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
Kusura bakmayın arkadaşlar proje ayarlarından optimizasyon kapatılmış.
kod:
Optimizasyon olmadan
Optimizasyon ile
Optimizasyon ile evet, tam tersi doğru, defalarca kontrol ettim
Su baskınını durdurun, önce malzemede ustalaşın ve ardından davanızı kanıtlayın. İşlemcinin ve belleğin çalışması hakkında en az bir kitap okusaydınız, sonuç herhangi bir test yapmadan sizin için net olurdu. Size bunların en ustacasını sundum, eğer programlamada sessizce ilerlemek istiyorsanız mutlaka okuyacaksınız.
Ve işte bellek ve işlemci, optimizasyondan bahsediyoruz, sen bir kitap teorisyenisin)
garip değil, MQL'deki en basit operatörleri ve işlemleri test edebilmeniz gerekiyor - peki, neden testime srand(GetTickCount()) ekledim?
;)
Bu arada daha dikkatli baktım oradaki döngüde de sonuç var gelecekte dikkate alınmaz, bu da derleyicinin onu kolayca kesebileceği anlamına gelir.
Bu arada daha dikkatli baktım oradaki döngüde sonuç var gelecekte dikkate alınmaz, bu da derleyicinin kolayca kesebileceği anlamına gelir.
kaldırılmış rand() bile - derleyicisi mükemmel bir şekilde satır içi, aşağıdaki testi yaptı:
2019.08.18 11:55:41.457 Hız Testi (EURUSD,H1) 1. s1=rand(): döngüler=100000000 ms=7672
2019.08.18 11:55:49.085 Hız Testi (EURUSD,H1) 2. s2=rand(): döngüler=100000000 ms=7625
2019.08.18 11:55:56.796 Hız Testi (EURUSD,H1) 3. s3=rand(): döngüler=100000000 ms=7719
2019.08.18 11:56:04.495 Hız Testi (EURUSD,H1) 4. s4=rand(): döngüler=100000000 ms=7703
2019.08.18 11:56:12.113 Hız Testi (EURUSD,H1) 5. s5=rand(): döngüler=100000000 ms=7610
2019.08.18 11:56:17.695 Hız Testi (EURUSD,H1) 1. q=rand(): döngüler=100000000 ms=5578
2019.08.18 11:56:23.362 Hız Testi (EURUSD,H1) 2. q=rand(): döngüler=100000000 ms=5672
2019.08.18 11:56:28.970 Hız Testi (EURUSD,H1) 3. q=rand(): döngüler=100000000 ms=5609
2019.08.18 11:56:34.637 Hız Testi (EURUSD,H1) 4. q=rand(): döngüler=100000000 ms=5672
2019.08.18 11:56:40.277 Hız Testi (EURUSD,H1) 5. q=rand(): döngüler=100000000 ms=5640
Öyleyse diyorum ki, "hata yapmamak" istiyorsanız, o zaman montajcıya gidin. Her şeyi kişisel olarak kontrol etmeniz gerektiğinden ... Sonuçta, açıklanan durum tam bir önemsememek. Daha karmaşık büyüklük sıraları olan şeyler var. OOP sizin için kesinlikle kontrendikedir. Derleyicinin şu veya bu sanal yöntemi normal bir çağrıya dönüştürdüğünü veya gereksiz bir işaretçi kontrolünü kesip kesmediğini bilemezsiniz... Böyle bir paranoya ile yönetilen MQL'de ne yapılabilir? )
Ve kodu derleyicinin (ve hayali olanların) özelliklerine göre, kodun doğruluğuna ve güvenilirliğine zarar verecek şekilde ayarlamak - bu açıkça iyi bir programcının yapması gereken şey değildir. Ve burada kodun yanlışlığından bahsediyoruz. Değişken, kullanıldığı blokta doğrudan bildirilmelidir.
Ha-ha-ha... Alexey, forumdaki OOP'nin ana yandaşlarından biri için "OOP kesinlikle kontrendikedir" diye iddia ediyorsunuz (haydi "siz").
Kod, derleyicinin özelliklerine göre değil, SİZİN düşüncenizin özelliklerine göre ayarlanmalıdır. Bu durumda - teoride döngü içinde bir değişken bildirmek verimliliği azaltır. Çünkü kabul edilen uzlaşımlara göre her seferinde bir değişken yaratılmalı ve her seferinde yok edilmelidir.
Verimlilikle ilgili bile değil. Güvenilir kod, şeffaf, anlaşılır ve değiştirilmesi ve bakımı kolay koddur.
Şahsen, program boyunca bir sürü değişken dağıldığından ve her seferinde şu veya bu değişkenin nerede oluşturulduğuna bakmanız gerektiğinden gerçekten hoşlanmıyorum. Bu nedenle, nerede oluşturulduklarını görmek ve ne zaman silineceklerini anlamak için mümkün olduğunca fonksiyonun başında değişkenleri hep birlikte bildirmeye çalışıyorum.
Bu durumda, örnek çok kısadır. Bir değişkenin oluşturulması ve kullanımı arasında düzinelerce satır ve bir sürü iç içe işlev olduğunda - benim için - değişken önceden bloğun dışında bildirildiğinde çok daha güvenilirdir.
Kusura bakmayın arkadaşlar proje ayarlarından optimizasyon kapatılmış.
kod:
Optimizasyon olmadan
Optimizasyon ile
Optimizasyon ile evet, tam tersi doğru, defalarca kontrol ettim
Genel olarak, bu örnekte, optimizasyon yardımıyla döngünün tüm gövdesi kesilebilir.
Genel olarak, her şey beklendiği gibi, saçma sapan uğraşmaya, var olmayan sorunları maviden aramaya ve gerçek sorunlar yaratmaya gerek olmadığına yakınlaşıyor.
Elleriniz kaşınıyorsa ve kendinizi havalı bir havalı bilgisayar korsanı olarak görüyorsanız, hemen assembler'a yazın. Aksi takdirde kenara çekilip derleyici amcanızın işini yapması için uğraşmayın)
Genel olarak, bu örnekte, optimizasyon yardımıyla döngünün tüm gövdesi kesilebilir.
Boş bir döngü gövdesiyle yürütmenin sonucu çok farklıdır, çok daha hızlı çalışır
Genel olarak, her şey beklendiği gibi, saçma sapan uğraşmaya, var olmayan sorunları maviden aramaya ve gerçek sorunlar yaratmaya gerek olmadığına yakınlaşıyor.
Elleriniz kaşınıyorsa ve kendinizi havalı bir havalı bilgisayar korsanı olarak görüyorsanız, hemen assembler'a yazın. Aksi takdirde kenara çekilip derleyici amcanızın işini yapması için uğraşmayın)
Asıl sorun, kendimi havalı bir bilgisayar korsanı olarak görmemem. Bu yüzden bence değişkenler döngünün dışında bildirilmelidir. Ve daha iyisi - işlevin en başında, hepsi aynı anda.
Ve sadece havalı korsanlar - gerektiğinde değişkenleri kodun içinde bildirebilirler.
Asıl sorun, kendimi havalı bir bilgisayar korsanı olarak görmemem. Bu yüzden bence değişkenler döngünün dışında bildirilmelidir. Ve daha iyisi - işlevin en başında, her şey aynı anda.
Ve sadece havalı korsanlar - gerektiğinde değişkenleri kodun içinde bildirebilirler.
Kodu mantıksal bloklara ayırmayı ve içlerinde ihtiyaç duydukları değişkenleri bildirmeyi ve çoğuna yalnızca bir blokta, çok aşağıda bir yerde ihtiyaç duyulan bir dizi değişkeni işlevin başında çitlememeyi tercih ederim.