Qualsiasi domanda da un PROFI a un SUPER PROFI - 1. - pagina 34

 
Questo è già abbastanza.
 

Sto cercando di accelerare le mie funzioni, quindi mi sono chiesto quanto tempo ci vuole per accedere alle variabili globali e alle variabili locali è lo stesso, così ho fatto uno script:

double H_global[1000],L_global[1000];
int start(){
   int i,j,start_local,start_global,GetTick;
   double H_local[1000],L_local[1000];
   start_local=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_local[i] = High[i];
         L_local[i] = Low[i];
      }
//---------------------
   start_global=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_global[i] = High[i];
         L_global[i] = Low[i];
      }
   GetTick = GetTickCount();
//---------------------   
   Print("локальный массив: " , GetTick-start_local , " миллисекунд.");
   Print("глобальный массив: ", GetTick-start_global, " миллисекунд.");
return(0);
}

Il mio registro è così:

2012.03.23 13:26:49 test EURUSD,H1: array globale: 1343 millisecondi.

2012.03.23 13:26:49 test EURUSD,H1: array locale: 2703 millisecondi.

Perché c'è questa differenza? Forse sto giudicando male il tempo di accesso alle variabili?

 
E pensare :)
 

Qualcuno può illuminare un idiota sul perché un ordine non si apre?

IL TESTER DICE "IL LOG DICE CHE IL FLUSSO COMMERCIALE È OCCUPATO" ?

ORDINI APERTI A MANO.

 
IgorM:

Sto cercando di accelerare le mie funzioni, quindi mi sono chiesto quanto tempo ci vuole per accedere alle variabili globali e alle variabili locali è lo stesso, così ho fatto uno script:

Il mio registro è così:

2012.03.23 13:26:49 test EURUSD,H1: array globale: 1343 millisecondi.

2012.03.23 13:26:49 test EURUSD,H1: array locale: 2703 millisecondi.

Perché c'è questa differenza? Forse ho stimato male il tempo di accesso alle variabili?

double H_global[1000],L_global[1000];
int start(){
   int i,j,start_local,start_global,GetTick;
   double H_local[1000],L_local[1000];
   start_local=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_local[i] = High[i];
         L_local[i] = Low[i];
      }
   GetTick = GetTickCount();
   Print("локальный массив: " , GetTick-start_local , " миллисекунд.");
//---------------------
   start_global=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_global[i] = High[i];
         L_global[i] = Low[i];
      }
   GetTick = GetTickCount();   
   Print("глобальный массив: ", GetTick-start_global, " миллисекунд.");
return(0);
}
 
TheXpert: E pensare :)

Sì, sono stato seduto qui per mezz'ora cercando di capire cosa sto sbagliando, se avessi l'abitudine di strofinarmi la nuca con la mano, avrei già la testa pelata! )))))

Ma seriamente, perché lo script mostra una differenza così grande? Se avessi un compilatore Borland, probabilmente sarebbe il contrario, le chiamate lontane possono essere spiegate, ma MT4 funziona come il principio Java - tutto in un mucchio?

Anche se non è importante, la cosa principale è scoprire se stimo correttamente il tempo di accesso, e se è corretto, allora sposterò metà del codice nelle variabili globali

 
VOLDEMAR:

Riavviare il terminale dovrebbe aiutare. Questo non è un problema di codice.

 
IgorM:

Prova così :)

   Print("локальный массив: " , start_global-start_local , " миллисекунд.");
   Print("глобальный массив: ", GetTick-start_global, " миллисекунд.");
 
Zhunko:
aaaaaaaaaaaaaaaaahhh, merda! Avevo paura che ci volesse molto tempo per l'output tramite Print()
 
IgorM:
aaaaaaaaaaaaaaahhhh, merda! Avevo paura che ci volesse molto tempo per l'output tramite Print()

Puoi farlo in questo modo:

double H_global[1000],L_global[1000];
int start(){
   int i,j,start_local,start_global
,GetTickG,GetTickL;

;
   double H_local[1000],L_local[1000];
   start_local=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_local[i] = High[i];
         L_local[i] = Low[i];
      }
   GetTickL = GetTickCount();
//---------------------
   start_global=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_global[i] = High[i];
         L_global[i] = Low[i];
      }
   GetTickG = GetTickCount();   
   Print("локальный массив: " , GetTickL-start_local , " миллисекунд.");
   Print("глобальный массив: ", GetTickG-start_global, " миллисекунд.");
return(0);
}
Motivazione: