从专业人员到超级专业人员的任何问题 - 1。 - 页 34

 
这已经足够了。
 

我正在寻找加速我的函数,所以我想知道访问全局变量 和局部变量需要多长时间是一样的,所以我做了一个脚本。

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

我的日志是这样的。

2012.03.23 13:26:49 test EURUSD,H1: 全局阵列:1343毫秒。

2012.03.23 13:26:49 test EURUSD,H1: 本地阵列:2703毫秒。

为什么会有这样的差异?也许我对变量的访问时间判断错误?

 
并思考:)
 

有谁能指点一下蠢蛋,为什么订单打不开?

测试员说 "日志显示贸易流繁忙"?

秩序用手打开。

 
IgorM:

我正在寻找加速我的函数,所以我想知道访问全局变量和局部变量需要多长时间是一样的,所以我做了一个脚本。

我的日志是这样的。

2012.03.23 13:26:49 test EURUSD,H1: 全局阵列:1343毫秒。

2012.03.23 13:26:49 test EURUSD,H1: 本地阵列:2703毫秒。

也许我对变量的访问时间估计错误?

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: 并认为:)

是啊,我在这里坐了半个小时,想知道我做错了什么,如果我有用手揉搓后脑勺的习惯,我现在已经是个光头了!我想,这就是我的工作。)))))

但说真的,为什么脚本显示出如此大的差异? 如果我有一个Borland编译器,它可能会是相反的,远调用可能会被解释,但MT4的工作原理就像Java原理一样--都在一个桩上?

虽然这并不重要,但主要的是找出我对访问时间的估计是否正确, 如果正确,那么我将把一半的代码移到全局变量 中。

 
VOLDEMAR:

重新启动终端应该有帮助。这不是一个代码问题。

 
IgorM:

像这样试试吧 :)

   Print("локальный массив: " , start_global-start_local , " миллисекунд.");
   Print("глобальный массив: ", GetTick-start_global, " миллисекунд.");
 
Zhunko:
aaaaaaaaaaahhhh,该死!我还担心通过Print()输出会花很长时间呢
 
IgorM:
aaaaaaaaaaahhhh,该死!我还担心通过Print()输出会花很长时间呢

你可以这样做。

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