Aide sur la POO - page 5

 

J'ai besoin d'écrire quelque chose ici aussi...

J'ai une telle chose dans mon code :

   union u_Data_t
     {
      T value;
      ulong data[sizeof(T)/8+1];
     } data_t;

T est le type int.

Temps d'exécution de la fonction 10*1024*1024 fois sous débogage : 214.659 millisecondes.

Sans débogage : 13190.941 millisecondes

Il n'y a pas d'erreur ici, la version release est beaucoup plus lente.

Changeons un peu la déclaration de la variable:

   static union u_Data_t
     {
      T value;
      ulong data[sizeof(T)/8+1];
     } data_t;

Il semble statique.

Sous le débogage : 213.045 millisecondes.

Sans : 70.237millisecondes

 
Vasiliy Sokolov #:
Dmitry, excusez-moi, connaissez-vous un autre langage de programmation que le mukl ? Non, vous ne le faites pas. Et vous n'avez toujours pas appris à travailler avec des objets et des pointeurs, c'est clair dans les quelques codes et même articles que vous avez publiés. C'est pourquoi je ne peux même pas répondre sérieusement à ce commentaire sans talent et franchement stupide. Lisez enfin wikipedia, apprenez ce qu'est un collecteur d'ordures et comment il est organisé, lisez enfin au moins une fois ce à quoi vous essayez de vous référer. Jusqu'à présent, tout cela ressemble à un chien qui aboie sur une caravane : insensé et sans pitié.

Occupez-vous d'abord de vos propres cafards. C'est drôle, tu es trop inadéquat. Et c'est moi qui suis modeste))

Vous ne pouvez pas répondre sérieusement à quoi que ce soit parce que vous ne pouvez pas répondre sérieusement du tout, parce que vous êtes vaseux.

Vasily, vous êtes vraiment inadéquat. Après tout, cette discussion sur le collecteur d'ordures remonte à un an, si ce n'est plus. C'est toujours là,

tu n'as pas trouvé ce que c'est en un an. Je veux dire, je ne sais pas si vous avez la moindre idée de ce que c'est, mais vous avez démontré ici

que vous ne comprenez pas, banalement, le sujet de la conversation, et que vous vous contredisez. Et la chose étonnante est que vous semblez savoir au moins

deux langues, dont une avec un collecteur d'ordures, et même ainsi, vous ne connaissez pas la différence entre une langue avec un collecteur d'ordures

et une langue sans ramasseur d'ordures.

Et répondez à vos mots - montrez-moi comment je ne sais pas travailler avec des objets et des pointeurs ?

 
Aliaksandr Hryshyn #:

la version release est significativement plus lente.

Code prêt pour la lecture ?

 
fxsaber #:

Un code prêt à jouer ?

//+------------------------------------------------------------------+
//|                                                        cBool.mqh |
//|                                               Aliaksandr Hryshyn |
//|                          https://www.mql5.com/ru/users/greshnik1 |
//+------------------------------------------------------------------+
#property copyright "Aliaksandr Hryshyn"
#property link      "https://www.mql5.com/ru/users/greshnik1"

//Битовый поток
class cBit_thread
  {
private:
   ulong             _bit_thread[];//Битовый поток данных
   uint              _bit_thread_size;//Количество записанных бит в потоке
   uint              _bit_thread_pos;//Текущя позиция для чтения/записи
public:
   //Запись последовательности бит
   //Размер увеличивается динамически
   template<typename T>
   int               Write(
      const T value,//Простая структура или переменная
      uint pos_bit_read=0,//С какой позиции начать считывание из структуры/переменной.Указывается в битах
      int bits_count=-1//Количество бит. -1=все до конца
   );//Возвращает количество записанных бит -1=ошибка
  };

template<typename T>
int cBit_thread::Write(const T value,uint pos_bit_read=0,int bits_count=-1)
  {
   static union u_Data_t
     {
      T value;
      ulong data[sizeof(T)/8+1];
     } data_t;
   ZeroMemory(data_t.data);
   data_t.value=value;

   if(pos_bit_read>=sizeof(T)*8)
      return -1;
   if(bits_count<0)
      bits_count=int(sizeof(T)*8-pos_bit_read);
   else
      if(pos_bit_read+bits_count>sizeof(T)*8)
         return -1;

   uint shift=int(pos_bit_read&63);
   int read_from=int(pos_bit_read>>6);

   int read_end=int(pos_bit_read+bits_count);
   uint write_to=0;
   ulong l1=0;
   for(int i1=read_from; i1<(read_end>>6)+1; i1++,write_to++)
     {
      l1=data_t.data[i1];
      data_t.data[write_to]=l1>>shift;
      if(write_to>0)
         data_t.data[write_to-1]|=l1<<(64-shift);
     }

   uint len1=ArrayRange(_bit_thread,0);
   uint len2b=_bit_thread_pos+bits_count;
   if(len2b+128>(len1<<6))
     {
      len2b=(len2b>>6)+2;
      ArrayResize(_bit_thread,len2b+1024);
      len2b+=1024;
      for(uint i1=len1; i1<len2b; i1++)
         _bit_thread[i1]=0;
     }
   int pos_end=(bits_count>>6)+((bits_count&63)!=0);
   shift=_bit_thread_pos&63;
   write_to=(_bit_thread_pos>>6);
   if(shift==0)
     {
      for(int i1=0; i1<pos_end; i1++)
        {
         l1=data_t.data[i1];
         _bit_thread[write_to]|=l1;
        }
     }
   else
     {
      for(int i1=0; i1<pos_end; i1++)
        {
         l1=data_t.data[i1];
         _bit_thread[write_to]|=(l1<<shift);
         _bit_thread[write_to+1]|=l1>>(64-shift);
        }
     }
   _bit_thread_pos+=bits_count;
   _bit_thread_size=MathMax(_bit_thread_size,_bit_thread_pos);
   return bits_count;
  }
//+------------------------------------------------------------------+

Et un scénario :

#include <cBool.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   cBit_thread thread;
   ulong mcs=GetMicrosecondCount();
   int num=1;
   for(int i1=0; i1<10*1024*1024; i1++)
     {
      thread.Write(num,0,1);
     }
   Print((GetMicrosecondCount()-mcs)/1000.0);
  }
 
Quelqu'un l'a-t-il fait ?
 
Aliaksandr Hryshyn #:

Et le scénario :

Release: 81.003
Debug: 295.312

Je ne vois pas le problème.

 
fxsaber #:

Je ne vois pas le problème.

Dernière version bêta 3062

 
Mes 229 et 225 sont exactement les mêmes.
 
Dmitry Fedoseev #:
J'ai des 229 et 225 - exactement les mêmes.

La version du terminal est-elle la même ?

 
Aliaksandr Hryshyn #:

La version du terminal est-elle la même ?

3061