Qualquer pergunta de um PROFI para um SUPER PROFI - 1. - página 34

 
Isso já é o suficiente.
 

Estou procurando acelerar minhas funções, então me perguntei quanto tempo leva para acessar variáveis globais e variáveis locais é o mesmo, então fiz um roteiro:

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);
}

meu diário de bordo é assim:

2012.03.23 13:26:49 teste EURUSD,H1: matriz global: 1343 milissegundos.

2012.03.23 13:26:49 teste EURUSD,H1: matriz local: 2703 milissegundos.

por que existe tal diferença? talvez eu esteja julgando mal o tempo de acesso variável?

 
E para pensar :)
 

Alguém pode esclarecer um idiota por que uma ordem não abre ???

TESTER DIZ "LOG DIZ QUE O FLUXO COMERCIAL ESTÁ OCUPADO" ?

ORDENS ABERTAS À MÃO.

 
IgorM:

Estou procurando acelerar minhas funções, então me perguntei quanto tempo leva para acessar variáveis globais e variáveis locais é o mesmo, então fiz um roteiro:

meu diário de bordo é assim:

2012.03.23 13:26:49 teste EURUSD,H1: matriz global: 1343 milissegundos.

2012.03.23 13:26:49 teste EURUSD,H1: matriz local: 2703 milissegundos.

por que existe tal diferença? talvez eu tenha estimado mal o tempo de acesso às variáveis?

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 para pensar :)

Sim, estou aqui há meia hora tentando descobrir o que estou fazendo de errado, se eu tivesse o hábito de esfregar a parte de trás da minha cabeça com a mão, já teria uma cabeça careca! )))))

Mas falando sério, por que o roteiro mostra uma diferença tão grande? Se eu tivesse um compilador Borland, provavelmente seria o oposto, chamadas distantes podem ser explicadas, mas o MT4 funciona como o princípio Java - tudo em uma pilha?

Embora não seja importante, o principal é descobrir se estimo corretamente o tempo de acesso, e se estiver correto, então moverei meio código para variáveis globais

 
VOLDEMAR:

A reinicialização do terminal deve ajudar. Isto não é um problema de código.

 
IgorM:

Experimente assim :)

   Print("локальный массив: " , start_global-start_local , " миллисекунд.");
   Print("глобальный массив: ", GetTick-start_global, " миллисекунд.");
 
Zhunko:
aaaaaaaaaaaaaaaahhhhh, merda! Eu estava com medo de que demorasse muito tempo para sair via Print()
 
IgorM:
aaaaaaaaaaaaahhhhh, merda! Eu estava com medo de que demorasse muito tempo para sair via Print()

Você pode fazer desta maneira:

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);
}
Razão: