MQL5'te OOP hakkında sorular - sayfa 71

 
Igor Makanu :

böyle sınıflar yazarsanız:

Araştırmanıza bakılırsa, hesaplamalarda yapı alanlarını sıklıkla kullanırsanız B sınıfı daha yavaş mı olacak?

Yani bir dizi nesneyi atlama zamanı tartışıldı)))

Örneğinize göre, artılar aynı olacak, ancak mql - bir nüansta, önce giden iki örtülü alan var, bu nedenle veri alanına ofset ile erişilecek, yani referans kaldırma sırasında ek hesaplamalar olacak.

 
Vladimir Simakov :

Yani bir dizi nesneyi atlama zamanı tartışıldı)))

Örneğinize göre, artılar aynı olacak, ancak mql - bir nüansta, önce giden iki örtülü alan var, bu nedenle veri alanına ofset ile erişilecek, yani referans kaldırma sırasında ek hesaplamalar olacak.

Teşekkürler, bu yardımcı olur!

 
Vladimir Simakov :

Yani bir dizi nesneyi atlama zamanı tartışıldı)))

Örneğinize göre, artılar aynı olacak, ancak mql - bir nüans olarak, önce giden iki örtülü alan var, bu nedenle veri alanına ofset ile erişilecek, yani referans kaldırma sırasında ek hesaplamalar olacak.

Her iki sınıf da benzerdir. Erişim, her iki durumda da, yalnızca yapının başlangıcına göre değil, sınıfın başlangıcına göre mahsup edilir. Onlar. yapının kendisi ağırlıksızdır. Genel gider yalnızca sınıflar tarafından oluşturulur.
 
Vladimir Simakov :

Yani, mistisizm yok - fizik yasaları iş başında.

"Fizik yasalarına" uymuyor.

 #include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh

long f1( const int Size, const long Amount = 5 e9 )
{
   long Sum = 0 ;
  
   for ( long i = 0 ; i < Amount; i++)
  {
    Sum += Size * i ;
    
    Sum |= 1 ;
  }
    
   return (Sum);
}

long f2( const int Size, const long Amount = 5 e9 )
{
   long Sum = 0 ;
  
   for ( long i = 0 ; i < Amount; i++)
  {
    Sum += Size * (Amount - i) ;
    
    Sum |= 1 ;
  }
    
   return (Sum);
}

void OnStart ()
{
   Print (_B(f1( 2 ), 1 ));
   Print (_B(f1( 200 ), 1 ));
  
   Print (_B(f2( 2 ), 1 ));
   Print (_B(f2( 200 ), 1 ));
}


         Alert : Time[Test6.mq5 267 : f1( 2 )] = 3252 ms.
         6553255921290448385
         Alert : Time[Test6.mq5 268 : f1( 200 )] = 4602 ms.
        - 8757194524499019775
         Alert : Time[Test6.mq5 270 : f2( 2 )] = 3061 ms.
         6553255931290448385
         Alert : Time[Test6.mq5 271 : f2( 200 )] = 3112 ms.
        - 8757193524499019775


Paradoksal bir sonuç elde edildi. Daha karmaşık hesaplamalar 1,5 kat daha hızlı yapılır ve boyuta bağlı değildir.

 
Vladimir Simakov :

Yani bir dizi nesneyi atlama zamanı tartışıldı)))

Örneğinize göre, artılar aynı olacak, ancak mql - bir nüansta, önce giden iki örtülü alan var, bu nedenle veri alanına ofset ile erişilecek, yani referans kaldırma sırasında ek hesaplamalar olacak.

Montajcı araştırması için teşekkürler Vladimir.
Ve Aleksey'nin önerdiği gibi, genel gider sınıflar tarafından yaratılır.
Buradan, bir sınıf olmadan yapabiliyorsanız, prosedürel bir tarzda kod yazmanın daha iyi olduğu sonucuna varabiliriz.
Yani, görev hız gerektirmiyorsa, bir sınıfa sarılabilir, ancak örneğin kenelerle çalışıyorsa, doğrudan sarmalayıcı olmadan kullanmak daha iyidir.
Prensip olarak, bu yaklaşımı takip ettim ve genellikle bir tür sınıf örneği bulduktan sonra, yöntemlerini prosedürel bir yaklaşıma ayrıştırdım.

 
Roman :

Montajcı çalışması için teşekkürler Vladimir.
Ve Aleksey'nin önerdiği gibi, sınıflar bir ek yük yaratır.
Buradan, bir sınıf olmadan yapabiliyorsanız, prosedürel bir tarzda kod yazmanın daha iyi olduğu sonucuna varabiliriz.
Yani, görev hız gerektirmiyorsa, bir sınıfa sarılabilir, ancak örneğin kenelerle çalışıyorsa, doğrudan sarmalayıcı olmadan kullanmak daha iyidir.
Prensip olarak, bu yaklaşımı takip ettim ve genellikle bir tür sınıf örneği bulduktan sonra, yöntemlerini prosedürel bir yaklaşıma ayrıştırdım.

Forumda trol var...
Daha önce, bazı kullanıcıların neden yoksayma işlevini tanıtmak istediğini anlamıyordum, ah, şimdi nasıl eksik ...

 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

MQL5'te OOP hakkında sorular

fxsaber , 2020.05.30 14:06

Uğraşmak bile istemiyorum. Basit yapılar yaptı.

         50000000
         50000000
         Alert : Time[Test6.mq5 280 : Func(Array1)] = 312 ms.
         1333106752
         Alert : Time[Test6.mq5 281 : Func(Array3)] = 1348 ms.
         1333106752
        : sizeof (STRUCT1) = 20
        : sizeof (STRUCT3) = 84

Basit bir yapının ilk alanına hangi nedenle erişim, büyüklüğüne bağlıdır - açık değildir.

Dizide 50M eleman kullanıyorsunuz.
20 ve 84 bayt boyutundaki yapılar için bunlar sırasıyla 0,93 GB ve 3,91 GB veridir.
Ve hesaplamanızın bir parçası olarak, muhtemelen tüm bu bellek işlemcinin önbelleğinden geçecek.
Ve elde edilen sonuçların çok mantıklı bir açıklaması, 0,93 GB boyutundaki verilerin bellekten işlemci önbelleğine 3,91 GB boyutundaki verilere göre dört kat daha hızlı yükleneceği olabilir.

Peki ya C++'daki testin sonuçları?
Montajcı kodunu gördünüz ama test sonuçlarını görmediniz mi yoksa kötü mü göründünüz?
 
Sergey Dzyublik :

Forumda trol var...
Daha önce, bazı kullanıcıların neden yoksayma işlevini tanıtmak istediğini anlamıyordum, ah, şimdi nasıl eksik ...

Başkalarına değil, kendinize bakacaksınız.
Cevap senin için ve senin için değildi.
Sessizce görmezden gel))

 
Sergey Dzyublik :
Dizide 50M eleman kullanıyorsunuz.
20 ve 84 bayt boyutundaki yapılar için bunlar sırasıyla 0,93 GB ve 3,91 GB veridir.
Ve hesaplamanızın bir parçası olarak, muhtemelen tüm bu bellek işlemcinin önbelleğinden geçecek.
Ve elde edilen sonuçların çok mantıklı bir açıklaması, 0,93 GB boyutundaki verilerin bellekten işlemci önbelleğine 3,91 GB boyutundaki verilere göre dört kat daha hızlı yükleneceği olabilir.

Peki ya C++'daki testin sonuçları?
Montajcı kodunu gördünüz ama test sonuçlarını görmediniz mi yoksa kötü mü göründünüz?
benzer şekilde elde edilmiştir. Sadece biraz daha hızlı, ama bu yüzden oran aynı, yani donanımsal.
 
Roman :

Montajcı çalışması için teşekkürler Vladimir.
Ve Aleksey'nin önerdiği gibi, sınıflar bir ek yük yaratır.
Buradan, bir sınıf olmadan yapabiliyorsanız, prosedürel bir tarzda kod yazmanın daha iyi olduğu sonucuna varabiliriz.
Yani, görev hız gerektirmiyorsa, bir sınıfa sarılabilir, ancak örneğin kenelerle çalışıyorsa, doğrudan sarmalayıcı olmadan kullanmak daha iyidir.
Prensip olarak, bu yaklaşımı takip ettim ve genellikle bir tür sınıf örneği bulduktan sonra, yöntemlerini prosedürel bir yaklaşıma ayrıştırdım.

Sınıf yerine bir yapı mümkündür, onlarla her şey yolunda.

Neden: