Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım 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
"Bir dosya kapatıldığında, veriler otomatik olarak diske aktarılır, bu nedenle FileClose() işlevini çağırmadan önce FileFlush() işlevini çağırmaya gerek yoktur" - Evet, Sergeev'in neden bahsettiğini anlamaya başlıyorum. Dosyadaki son kaydın korunmasını garanti etmek için FileClose() yerine FileFlush()? Ve bu akıllıca bir karar olur mu?
yerine değil, zorunluluktan.
Flush - geri kalan verileri temizler ve dosyayı KAPATMAZ . İstediğin bu mu?
Kapat - geri kalan verileri diske boşaltır ve kapatır.
yerine değil, zorunluluktan.
Flush - geri kalan verileri temizler ve dosyayı KAPATMAZ . İstediğin bu mu?
Kapat - geri kalan verileri diske boşaltır ve kapatır.
FileFlush () kullanarak zamanı en aza indiren bir şey pek iyi çalışmıyor:
2011.05.29 21:58:20 FlushSave (EURGBP,M1) FileFlush. GetTickCount() = 133766
2011.05.29 22:00:33 FlushSave (EURGBP,M1) Dosya Kapat. GetTickCount() = 133734
Aslında, her iki işlevin de çalışması aynı miktarda zaman alır.
Anladığım kadarıyla, bu satır konumu ofset olmadan dosyanın başına taşır. Bu, mevcut bilgilerin üzerine yazmanıza olanak tanır (yani tarih güncellenir ancak dosyada birikmez)
Bu durumda SEEK_SET yerine dosyanın sonuna geçiş kullanırsanız, veriler dosyada birikir.
Her Flush yaptığınızda yeni bir dosya tanıtıcısı açarsınız. Ne için? Ve bu arada kapatmayın.
FileFlush işlevinin avantajı, tutamacı yeniden açmanıza gerek olmamasıdır.
1. Anladığım kadarıyla bu satır dosyadaki pozisyonu ofsetsiz olarak hareket ettiriyor. Mevcut bilgilerin üzerine yazmanıza izin veren şey (yani tarih güncellenir ancak dosyada birikmez)
Bu durumda SEEK_SET yerine dosyanın sonuna geçiş kullanırsanız, veriler dosyada birikir.Her Flush yaptığınızda yeni bir dosya tanıtıcısı açarsınız. Ne için? Ve bu arada kapatmayın.
FileFlush işlevinin avantajı, tutamacı yeniden açmanıza gerek olmamasıdır.
Böyle mi yaptı:
Sonuç:
2011.05.29 23:14:31 FlushSave (EURGBP,M1) FileFlush. GetTickCount() = 13563
2011.05.29 23:14:32 FlushSave (EURGBP,M1) Dosya Kapat. GetTickCount() = 531
Aynı zamanda, belgelere göre satırları değiştirdim:
Ama FileFlush()'ı FileWrite()'dan önce çağırmanın amacını henüz çözemedim.Böyle mi yaptı:
Sonuç:
2011.05.29 23:14:31 FlushSave (EURGBP,M1) FileFlush. GetTickCount() = 13563
2011.05.29 23:14:32 FlushSave (EURGBP,M1) Dosya Kapat. GetTickCount() = 531
Aynı zamanda, belgelere göre satırları değiştirdim:
Ama FileFlush()'ı FileWrite()'dan önce çağırmanın amacını henüz çözemedim.İşte bir seçenek:
Sonuç FileFlush'tır. GetTickCount() = 26125
İşte bir seçenek:
Sonuç FileClose'dur. GetTickCount() = 3969Bu seçenek 47'den 110'a kadar bir sonuç verdi.
1. Sonuç - FileFlush'ı bir döngüde kullanmak , yürütmeyi yaklaşık 260 kat yavaşlatır.
2. Bu tür bir varyantta 50000 kayıt üzerindeki döngü aşağıdaki sonuca sahiptir - FileFlush. GetTickCount() = 1891
3. 50.000 giriş için bir döngü yürütürken, dosyaya yazmayı tamamlamadan terminali asla kapatmayı başaramadım (terminali kapattım ve süreci "öldürdüm").
4. 100.000 kayıtlık bir döngü ile, dosyada 65536'dan fazla kayıt varken terminali öldürmek mümkündü (boşaltma Excel 2003'te yerleştirilmiştir).
Aynı zamanda, belgelere göre satırları değiştirdim:
Bu belgelerde nerede yazıyor?
Ona sahip olmayan bir şeyin anlamını nasıl anlayabilirsiniz? Hatların sırasını anavatanlarına iade edin ve iki kez kontrol edin. Görünüşe göre belgeler pek doğru değil.
Ama... Testleriniz sayesinde, hata bulundu gibi görünüyor - FileFlush , değişiklik olmadığında kabul edilemez derecede uzun bir süre yiyor.ilginç :
AMAN TANRIM! Sonucun genellikle delilik olduğu yer. Bu şekilde "OOP daha hızlı" veya "göstergeler yavaş, tüm kodu bir Expert Advisor'a aktarmanız gerekiyor" gibi uygulamalar daha sonra çıkıyor.
Uzman, bu fonksiyonun nasıl doğru kullanılacağını yazın.
Varsayımsal olarak şöyle:
Onlar. FileClose -- FileOpen bağlamasını FileFlush ile karşılaştırmak doğrudur .
Teorik olarak, FileFlush, FileClose'un ayrılmaz bir parçası olmalıdır ve bir paketten daha yavaş olamaz.
Değişiklikleri görünmeden önce yanıp sönmenin bir anlamı yoktur. henüz yoklar :)
Ancak, çılgın sonuçlara rağmen, testler hala gösterge niteliğindedir, bu nedenle geliştiricilerin, herhangi bir değişiklik olmadığında işlevin nasıl çalıştığına dair yorumlarını bekliyoruz.