MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1005

 
İşte nasıl çalıştığı.
 
Seric29 :
İşte nasıl çalıştığı.
İlyas zaten her şeyi oldukça net bir şekilde açıkladı. Yazılarına bakın.
 
Seric29 :
İşte nasıl çalıştığı.

Belgelerdeki her şeyi okuduğunuzdan emin misiniz? Bunu bile okudular:

Not

İşlev yalnızca dinamik dizilere uygulanabilir. Aynı zamanda, SetIndexBuffer() işlevi tarafından gösterge arabellekleri olarak atanan dinamik dizilerin boyutunu değiştiremeyeceğinizi unutmayın. Gösterge arabellekleri için, tüm yeniden boyutlandırma işlemleri, terminalin yürütme alt sistemi tarafından gerçekleştirilir.

Dizideki toplam öğe sayısı 2147483647'yi aşamaz.

Sık sık bellek ayırırsanız, fiziksel bellek ayırma miktarını azaltmak için bir geri dönüşü belirten üçüncü parametreyi kullanmanız önerilir. ArrayResize işlevine yapılan sonraki tüm çağrılar , belleğin fiziksel olarak yeniden tahsis edilmesine yol açmaz, yalnızca ayrılmış bellek içindeki dizinin ilk boyutunun boyutunu değiştirir. Üçüncü parametrenin yalnızca fiziksel bellek ayırma gerçekleştiğinde kullanılacağını unutmayın, örneğin:

ArrayResize (dizi,1000,1000);
için (int i=1;i<3000;i++)
    ArrayResize (dizi,i,1000);

Bu durumda, 3000 yineleme için döngüye girmeden önce, dizi boyutu 1000'e ve ikincisi 2000'e eşit olacak şekilde 2 bellek yeniden tahsisi olacaktır. Üçüncü parametre atlanırsa, 2000 fiziksel yeniden tahsisat bellek oluşacak ve bu programı yavaşlatacaktır.


Bunun neresi net değil???

 
Alexey Viktorov :

Belgelerdeki her şeyi okuduğunuzdan emin misiniz? Bunu bile okudular:

Bunun neresi net değil???

Yani bu sadece hiçbir resim, örnek olmadığı ve bu yeniden dağıtımların ne anlama geldiğini nasıl istediğinizi ve ne olduğu açıklanmadıysa geliştiriciler tarafından planlandığı gibi% 100 nasıl kullanılacağını tahmin edin. Burada yazılan 3 satıra bakılırsa, ArrayResize (dizi, 1000, 1000); 2000 elemanlı bir dizi oluşturur. Ama burada net değil. Örneğin bunu ArrayResize (dizi,1,1000) yaparsam; 1000, dizi 1000'e hızlanana kadar boşta kalacaktır.

 for ( int i= 1 ;i< 1001 ;i++) ArrayResize (массив,i, 1000 );

Veya hız aşırtmadan önceki program bu bölümü basitçe sayacı artırarak kullanacaktır. Genel olarak, net olmadığını söylüyorum ve hepsi bu.Ya da bu bin, işlemciden hızlı bir şekilde bellek çekmek için aptalca yakınlarda, eğer durum buysa, o zaman hepsi aynı ve yedek belleğin de aktarılması gerekecek, o zaman rezerv olmadan çalışmak daha kolaydır. Genel olarak kod yok, bilgi yok, resim yok, nasıl çalıştığı belli değil.

 
Sabit sürücünün bir tür Sistem sınıfını %100 yüklüyor olması (10k'da) başınıza geldi mi? Aynı şey Alps terminalinde de oluyor... Genellikle terminaller testler sırasında diski yükler, ama burada cidden çok fazla... Uzun değil, 3-5 saniye, ama özellikle
 
Yevhenii Levchenko :
Sabit sürücünün bir tür Sistem sınıfını %100 yüklüyor olması (10k'da) başınıza geldi mi? Aynı şey Alps terminalinde de oluyor... Genellikle terminaller testler sırasında diski yükler, ama burada cidden çok fazla... Uzun değil, 3-5 saniye, ama özellikle

olur, ancak bilgisayarı yeniden başlattıktan sonra

10-ke'de bilgisayarı 10-15 dakika yükledikten sonra, Windows defansı "diski kemirir" ve bilgisayar kullanım istatistikleri toplanır

çözüm - PC uyku moduna giriyor, bilgisayarı yeniden başlatmadan bir aylığına bilgisayarım var, klavyede bilgisayarı kapatmak yerine uyku düğmesine basıyorum - birkaç kez elektrik gitti, PC açıksa Win 10 sorunsuz yüklendi Rüyada

 
Seric29 :

Yani bu sadece hiçbir resim, örnek olmadığı ve bu yeniden dağıtımların ne anlama geldiğini nasıl istediğinizi ve ne olduğu açıklanmadıysa geliştiriciler tarafından planlandığı gibi% 100 nasıl kullanılacağını tahmin edin. Burada yazılan 3 satıra bakılırsa , ArrayResize (dizi, 1000, 1000); 2000 elemanlı bir dizi oluşturur. Ama burada net değil. Örneğin bunu ArrayResize (dizi,1,1000) yaparsam; 1000, dizi 1000'e hızlanana kadar boşta kalacaktır.

Veya hız aşırtmadan önceki program bu bölümü basitçe sayacı artırarak kullanacaktır. Genel olarak, net olmadığını söylüyorum ve hepsi bu.Ya da bu bin, işlemciden hızlı bir şekilde bellek çekmek için aptalca yakınlarda, eğer durum buysa, o zaman hepsi aynı ve yedek belleğin de aktarılması gerekecek, o zaman rezerv olmadan çalışmak daha kolaydır. Genel olarak kod yok, bilgi yok, resim yok, nasıl çalıştığı belli değil.

Sadece üç satır kod değil, aynı zamanda her şeyin oldukça net bir şekilde açıklandığı metni de okumak gerekir.

Ayrılmış bellek ve dizi boyutu farklı kavramlardır. ArrayResize (dizi,1000,1000) dizisinin boyutunu geçersiz kılarsanız; o zaman dizinin son elemanı 999 olacak ve artık olmayacak. Ancak dizinin boyutunu artırmaya ihtiyaç varsa, bellek yeniden tahsis edilmeyecektir. Bir dizide o kadar fazla boşluk payına ihtiyacınız yoksa, daha azını yapın veya hiç rezerve etmeyin.

 

Tünaydın!
Functions içine bir parametreyi dizi olarak koymak istiyorum. Nasıl doğru yapacağımı bulamıyorum. Örneği düzeltir misin?

 void OnTick ()
  {
//---
   int TestArr []= { 5 , 3 , 9 , 4 };
   TestFArr ( TestArr[ ]);
  }
//+------------------------------------------------------------------+

void TestFArr ( int TestArr [])
  {
   int size= ArraySize ( TestArr );
   Print ( " --------------- size: " ,size);
  }
//+------------------------------------------------------------------+
 
Nauris Zukas :

Tünaydın!
Fonksiyonlarda bir parametreyi dizi olarak koymak istiyorum. Nasıl doğru yapacağımı bulamıyorum. Örneği düzeltir misin?

 void OnTick ()
  {
//---
   int TestArr[]= { 5 , 3 , 9 , 4 };
   TestFArr( TestArr );
  }
//+------------------------------------------------------------------+

void TestFArr( int & TestArr[])
  {
   int size= ArraySize (TestArr);
   Print ( " --------------- size: " ,size);
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin :

Teşekkür ederim!