MQL4 ve MQL5'te Rakamları () atlayarak herhangi bir sayıdan (sadece tırnak işaretleri değil) sonra ondalık basamak sayısını alma - sayfa 15

 
Igor Makanu :

ArrayCopy(), Sish'in memmove() ilkesine göre yapılırsa,

o zaman, ArrayCopy () hızının bellek ayırma hızına bağlı olduğunu düşünüyorum, eğer kopyalama için ara ara belleğin belleği hazırsa, bellek tahsis edilmemişse ArrayCopy () çok hızlı bir şekilde yürütülür, ardından istekler işletim sistemine bellek ayırmaya başlayacak

test etmeyi deneyebilirsiniz - büyük miktarda veri içeren ArrayCopy() öğesine bir çağrı yapın, böylece arabelleği değiş tokuş için hazırlayın ve ardından kopyalamak ve hızı ölçmek için daha küçük miktarlarda veri içeren ArrayCopy() ile bir döngü yapın

Mevcut örneğimizde, kopyalama statik bir diziye yapılır ve ArrayCopy'nin basit bir diziden daha yavaş olması elbette ilginçtir. Bellek ayırmanız gerekiyorsa, yine de yapmanız gerekir.

 
Ilya Malev :

Mevcut örneğimizde, kopyalama statik bir diziye yapılır ve ArrayCopy'nin basit bir diziden daha yavaş olması elbette ilginçtir. Bellek ayırmanız gerekiyorsa, yine de yapmanız gerekir.

temelde statik veya dinamik değil, ArrayCopy()'nin nasıl uygulandığını bilmiyoruz, bunun standart Sish işlevleri üzerinde bir "sarmalayıcı" olduğunu varsaydım, memmove() genellikle ek bir arabellek aracılığıyla çalışır... daha önce yazmıştı, nasıl ve hangi derleyicinin çalıştığını söylemek zor

Not: MQL'de yürütme hızını nasıl test edeceğimi bilmiyorum ((( - birkaç kez denedim, yardımdan örnekler aldım gibi görünüyor, bir nedenden dolayı sonuçlar çok farklı, hem de gereksiz) Bu soruyu puanladım - performansı test etmiyorum, genellikle profil oluşturucuya ve zamanında nasıl yapıldığına bakarım

 
Igor Makanu :

Ben sadece MQL'de yürütme hızını nasıl test edeceğimi bilmiyorum ((( - Birkaç kez denedim, yardımdan örnekler aldım gibi görünüyor, bir nedenden dolayı sonuçlar çok farklı, iyi, gereksiz puanlar aldım) bu soru - Performansı test etmiyorum, genellikle profil oluşturucuya zamanında ne ve nasıl yapıldığına bakarım

işte yukarıda kullandığım en kolay yol

 #property strict

#define   test(M,S,EX)        { uint mss= GetTickCount (); int nn=( int ) pow ( 10 ,M); for ( int tst= 0 ;tst<nn;tst++){EX;} \
                                 printf ( "%s: loops=%i ms=%u" ,S,nn, GetTickCount ()-mss);}

void OnStart ()
 {
   int arr1[ 100 ]={ 0 },arr2[ 100 ]={ 0 };
  test( 7 , "Копирование через ArrayCopy" , ArrayCopy (arr1,arr2))
  test( 7 , "Копирование через for" , for ( int i= 0 ;i< 100 ;i++)arr1[i]=arr2[i])
 }  


 
Ilya Malev :

işte yukarıda kullandığım en kolay yol


ATP, aldım, yarın test edeceğim

 
Ilya Malev :

Evet, bu çok daha hızlı çalışacaktır (mümkün olduğunda ArrayCopy ile değiştirilir, gerisi aynıdır):

Aklıma gelen ilk şeyi denemeden yazdığımı söylüyorum))

Bu seçenek benimkinden farklı değil. Ölçümler (minimum 10 deneme süresi alınır) bunu doğrular.

https: //www.mql5.com/ru/forum/287618/page14#comment_9807465
TicksToIntArray_fxsaber2
Time [TicksToIntArray(TicksIn,Array)] = 301036
IntArrayToTicks_fxsaber2
Time [IntArrayToTicks(Array,TicksOut)] = 315109
true

https: //www.mql5.com/ru/forum/287618/page14#comment_9808274
TicksToIntArray_antfx1
Time [TicksToIntArray(TicksIn,Array)] = 216101
IntArrayToTicks_antfx1
Time [IntArrayToTicks(Array,TicksOut)] = 203610
true

https: //www.mql5.com/ru/forum/287618/page14#comment_9810247
TicksToIntArray_antfx2
Time [TicksToIntArray(TicksIn,Array)] = 303656
IntArrayToTicks_antfx2
Time [IntArrayToTicks(Array,TicksOut)] = 312008
true

Döngüye sahip varyantın daha hızlı olduğu görülebilir, çünkü 60/4 = 15 elemanlı döngü.

Dosyalar:
 
fxsaber :

Bu seçenek benimkinden farklı değil.

Görünüşe göre evet, yalnızca yapının türü ve dizinin türü isteğe bağlıdır.

 
fxsaber :

Döngüye sahip varyantın daha hızlı olduğu görülebilir, çünkü 60/4 = 15 elemanlı döngü.

Aynı MqlTicks ve int ile ArrayCopy'den daha hızlı olması garip...

 
Ilya Malev :

Aynı MqlTicks ve int ile ArrayCopy'den daha hızlı çıkması garip ...

MT5x64'te koşuyorum.

İlya Malev :

Görünüşe göre evet, yalnızca yapının türü ve dizinin türü isteğe bağlıdır.

Daha fazla insanın katılabilmesi için genel vakayı bilerek atladı.


şimdilik olsun

https: //www.mql5.com/ru/forum/287618/page14#comment_9808274
TicksToIntArray_antfx1
Time [TicksToIntArray(TicksIn,Array)] = 213426
IntArrayToTicks_antfx1
Time [IntArrayToTicks(Array,TicksOut)] = 202693
true

https: //www.mql5.com/ru/forum/287618/page14#comment_9807465
TicksToIntArray_fxsaber3
Time [TicksToIntArray(TicksIn,Array)] = 192362
IntArrayToTicks_fxsaber3
Time [IntArrayToTicks(Array,TicksOut)] = 159932
true
 
fxsaber :

MT5x64'te koşuyorum.

Daha fazla insanın katılabilmesi için genel vakayı bilerek atladı.


şimdilik olsun

seninki daha hızlı sanki :)

İşlevselliği aynı ArrayCopy'ye (kaynak başlangıç, hedef başlangıç, sayım) getirmek ve parametrelerin doğruluğunu kontrol etmek için eklenecek hala çok sayıda hizmet kodu var...

Genel olarak, o kadar çok harika eseriniz / kitaplığınız var ki, forumda en iyi çözümü sormanız ve tartışmanız garip :)

 
Ilya Malev :

forumda en iyi çözümü sorman ve tartışman garip :)

HistoryTicks-kütüphanesine ihtiyacım var. Katıldığınız için teşekkürler.