Alle Fragen von einem PROFI an einen SUPER PROFI - 1. - Seite 34

 
Das ist schon genug.
 

Ich bin auf der Suche nach Beschleunigung meiner Funktionen, so fragte ich mich, wie lange es dauert, um globale Variablen und lokale Variablen zugreifen ist das gleiche, so dass ich ein Skript gemacht:

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

Mein Protokoll sieht folgendermaßen aus:

2012.03.23 13:26:49 Test EURUSD,H1: Globales Array: 1343 Millisekunden.

2012.03.23 13:26:49 Test EURUSD,H1: Lokales Array: 2703 Millisekunden.

Warum gibt es einen solchen Unterschied? Vielleicht schätze ich die Zugriffszeit der Variablen falsch ein?

 
Und zum Nachdenken :)
 

Kann jemand einen Dummkopf aufklären, warum eine Bestellung nicht geöffnet wird?

TESTER SAGT: "PROTOKOLL SAGT, HANDELSFLUSS IST BESCHÄFTIGT" ?

BESTELLUNGEN VON HAND ÖFFNEN.

 
IgorM:

Ich bin auf der Suche nach Beschleunigung meiner Funktionen, so fragte ich mich, wie lange es dauert, um globale Variablen und lokale Variablen zugreifen ist das gleiche, so dass ich ein Skript gemacht:

Mein Protokoll sieht folgendermaßen aus:

2012.03.23 13:26:49 Test EURUSD,H1: Globales Array: 1343 Millisekunden.

2012.03.23 13:26:49 Test EURUSD,H1: Lokales Array: 2703 Millisekunden.

Warum gibt es einen solchen Unterschied? Vielleicht habe ich die Zugriffszeit auf die Variablen falsch eingeschätzt?

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: Und zum Nachdenken :)

Ja, ich sitze hier schon seit einer halben Stunde und versuche herauszufinden, was ich falsch mache. Wenn ich die Angewohnheit hätte, mir mit der Hand den Hinterkopf zu reiben, hätte ich eine Glatze! )))))

Aber im Ernst, warum zeigt das Skript einen so großen Unterschied? Wenn ich einen Borland-Compiler hätte, wäre es wahrscheinlich das Gegenteil, weite Aufrufe können erklärt werden, aber MT4 funktioniert nach dem Java-Prinzip - alles auf einen Haufen?

Obwohl es nicht wichtig ist, geht es in erster Linie darum, herauszufinden, ob ich die Zugriffszeit richtig einschätze, und wenn dies der Fall ist, dann werde ich die Hälfte des Codes in globale Variablen verschieben

 
VOLDEMAR:

Ein Neustart des Terminals sollte helfen. Es handelt sich nicht um ein Codeproblem.

 
IgorM:

Probieren Sie es so :)

   Print("локальный массив: " , start_global-start_local , " миллисекунд.");
   Print("глобальный массив: ", GetTick-start_global, " миллисекунд.");
 
Zhunko:
aaaaaaaaaaaaahhhhhh, Scheiße! Ich hatte schon befürchtet, dass die Ausgabe über Print() sehr lange dauern würde
 
IgorM:
aaaaaaaaaaaaahhhh, Scheiße! Ich hatte schon befürchtet, dass die Ausgabe über Print() sehr lange dauern würde

Sie können es so machen:

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