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
Ve evet, MQL'de metin ayrıştırma hala bir zevktir :-) Peki, metin işleme için tasarlanmamıştır. Yani, yapabilirsin, ama bu @oops..
Diziler, siparişler - bu MQL'nin yoludur
İşte bundan bahsediyoruz... :)
Çok yönlülük genellikle yavaşlıkla eş anlamlıdır ve hatta daha çok tanga ile eş anlamlıdır.
Bir örnek vereceğim.
Bir keresinde WebRequest kullanarak bir kripto borsasından alınan bir dizgiyi ayrıştırıyordum. Ve kendisi tarafından "yüksek hızlı C ++ kitaplığından" taşınan Sergeev JSON kitaplığı aracılığıyla ayrıştırma gerçekleştirdi. Ve hızın bir şekilde çok yetersiz olduğunu fark ettim. Orada her şey "evrensel" çizgilerle gerçekleştirildi.
Düşük hızın sebebinin stringler olduğunu anladım ve string fonksiyonlarını kullanmaktan kurtulmak istedim ve direkt olarak uchar dizisinden bir parsing fonksiyonu yazdım. Sonuç beni çok şaşırttı. Ayrıştırma hızım .... (drumroll) 800 kat daha hızlıydı. Tüm dizeyi JSON aracılığıyla ayrıştırmak 0,3 saniye sürdüyse, işlevim aracılığıyla yarım milisaniyeden az sürdü.
İşte benim uchar dizisi aracılığıyla yaptığım ayrıştırma örneği.
Teklifinizin özü aşağıdaki gibidir:
Başlangıçta dizeleri iletmek için MT nesnelerini kullanmak istedim.
Başlangıçta ikinci seçeneğin daha hızlı olduğunu düşündüm.
Benim kadar çok problemle çalışırken, bir çözüm seçerken sezgiye güvenmek zorundasın. Hayat her şeyi iyice kontrol etmeye yetmez. Kararların yönünü seçerken ya bir ekibe ya da mükemmel bir içgüdüye ihtiyacınız var. Ve elbette, profesyonellikten fedakarlık etmeli ve bilgi boşluklarına katlanmalısınız. Aksi takdirde, el sanatları ile uğraşmaya devam edecek (profesyonel olarak sürülse de) ve mega projeyi asla bitirmeyecektir. Bu gerçeklik.
Teklifinizin özü aşağıdaki gibidir:
tam olarak değil.
meşgulken - açıklamaya zaman yok.
Kodumu detaylı bir şekilde incelerseniz beyaz nokta kalmaz, o zaman kendiniz için birçok keşif yapmış olursunuz.
not. Sadece bir hata ayıklayıcı kullanılmadan bunu anlamak çok daha zor olacaktır. Kullanmaya başlayıp başlamadığınızı veya bu önemli aracı hala kullanmadığınızı bilmiyorum.
...
Kodumu detaylı bir şekilde incelerseniz beyaz nokta kalmaz, o zaman kendiniz için birçok keşif yapmış olursunuz.
not. Sadece bir hata ayıklayıcı kullanılmadan bunu anlamak çok daha zor olacaktır. Kullanmaya başlayıp başlamadığınızı veya bu önemli aracı hala kullanmadığınızı bilmiyorum.
Yarın kodunuza daha yakından bakacağım. (Zaman dilimlerini unutmayın)
Belki kendim için yeni bir şeyler keşfederim. ))
Herhangi bir yapı bir dizedir. Yapı dizisi, biçimlerinin açıklamasını içeren bir dizi dizidir. Bir sınıf bir yapı ve yöntemlerdir, bir sınıf uygulaması bir dizi uygulamadır (Fransızcamı bağışlayın).
Son ana kadar hiçbir şeyi dönüştürmeye gerek yoktur. Burada sadece dizeler söz konusudur. Basitçe normalleştirilirler: biri 2 veya 4 bayt alır ve biri - 1, bu nedenle hizalamanız gerekir.
ZY Bu yaklaşımı ilk kez yaklaşık olarak 1993 yılında Clarion DBMS'de uygulamıştır. Her şey çok hızlı çalıştı.
Herhangi bir yapı bir dizedir. Yapı dizisi, biçimlerinin açıklamasını içeren bir dizi dizidir. Bir sınıf bir yapı ve yöntemlerdir, bir sınıf uygulaması bir dizi uygulamadır (Fransızcamı bağışlayın).
Son ana kadar hiçbir şeyi dönüştürmeye gerek yoktur. Burada sadece dizeler söz konusudur. Basitçe normalleştirilirler: biri 2 veya 4 bayt alır ve biri - 1, bu nedenle hizalamanız gerekir.
ZY Bu yaklaşımı ilk kez yaklaşık olarak 1993 yılında Clarion DBMS'de uygulamıştır. Her şey çok hızlı çalıştı.
yaklaşık aynı zamanda aynı :-) Bir okul... bu arada, DBMS fena değildi ve birçok yönden zamanının ilerisindeydi.
PS/, arka planda "her şey bir satır/metindir" kavramı düzeyinde sevilen bir gıdıklamadır. Gerçek piton hızı
Yarın kodunuza daha yakından bakacağım. (Zaman dilimlerini unutmayın)
Belki kendim için yeni bir şeyler keşfederim. ))
belki bu hala yararlıdır
TF değiştirilirken değerini yeniden başlatmayan double örneğinde bir kaynak değişkeni kullanan bir gösterge örneği. Terminal global değişkenlerine daha uygun bir alternatif. Globallerle aynı şekilde, çeşitli veri yapılarını ve bu yapıların dizilerini kullanabilirsiniz.
belki bu hala yararlıdır
)
İlgi uğruna, sendika seçeneğini deneyeceğim. Ve CharArrayToString ve StringToCharArray ile. Her ne kadar içgüdüm bana MT nesnelerinin tanımı yoluyla iletişimden daha hızlı olmanın pek mümkün olmadığını söylüyor. Ancak yanılıyor olabilirim. Göreceğiz...
Peter, başlangıçta bir oyun yaptın ve şimdi oyununun içindeki mesajlaşma performansından bahsediyorsun. Anlıyorsunuz: string sadece uygun bir ***, başka bir şey değil. Herhangi bir veri gerçekten sadece bellekteki bir bayt koleksiyonudur. Bu nedenle, doğrudan baytlarla çalışmanız önerilir ve her zaman olduğu gibi inatçısınız, aynı dizenin aynı bayt dizisi olduğunun farkında değilsiniz. Bu nedenle, bir dizeyi bir uchar dizisine dönüştürerek hiçbir şey kaybetmezsiniz, ancak bir dizeyi ayrıştırırken performansınız gerçekten düşer. Bu nedenle, tüm sezgileriniz genellikle geçmiştir.
1. Peter, başlangıçta bir oyun yaptınız ve şimdi oyununuzun içindeki mesajlaşma performansından bahsediyorsunuz.
2. Anlıyorsunuz: string sadece uygun bir ***, başka bir şey değil. Herhangi bir veri gerçekten sadece bellekteki bir bayt koleksiyonudur. Bu nedenle, doğrudan baytlarla çalışmanız önerilir ve her zaman olduğu gibi inatçısınız, aynı dizenin aynı bayt dizisi olduğunun farkında değilsiniz. Bu nedenle, bir dizeyi bir uchar dizisine dönüştürerek hiçbir şey kaybetmezsiniz, ancak bir dizeyi ayrıştırırken performansınız gerçekten düşer.
3. Bu nedenle, tüm sezgileriniz genellikle geçmiştir.
1. "Oyun" - bu durumda, bu sizin anlayışınızdır, benim yaptığım şey değil. Bir motorun ne olduğunu ve ne olduğunu anlamanız 75 sayfa sürdü. Anlayın: Kusurlar ve hatalar özü karakterize etmez. Hiçbir öz biçimi özün kendisini karakterize etmez . Nasıl giyindiğiniz, nasıl bir insan olduğunuzu belirlemez. Sadece yanlış düşünme, bütünü özele göre yargılar.
2. Bu benim için zaten açık. StringToChar işlevini kullanarak gerçekten hız artışı olacak mı, bugün kontrol edeceğim.
3. Sezgilerimi her gün kontrol ederim. Her gün şüphe ediyorum. Ve doğru. Başarısız olursa, Akıl tarafından yönlendirilmeniz gerekir. Ancak Akıl, her zaman ona güvenemeyecek kadar sınırlı, kibirli ve aptaldır. Bu nedenle, sezgi tek alternatiftir. Eğer neden bahsettiğimi anladıysan...