string a="a",b="b",c;
uint start,stop;
long i,length=10000000;
//--- первый способ
start=GetTickCount();
for(i=0;i<length;i++)
{
c=a+b;
}
stop=GetTickCount();
Print("time for 'c = a + b' = ",(stop-start)," milliseconds, i = ",i);
//--- второй способ
a="a"; // заново инициализируем переменную a
start=GetTickCount();
for(i=0;i<length;i++)
{
StringAdd(a,b);
}
stop=GetTickCount();
Print("time for 'StringAdd(a,b)' = ",(stop-start)," milliseconds, i = ",i);
//--- третий способ
a="a";c="";
start=GetTickCount();
for(i=0;i<length;i++)
{
int k=StringConcatenate(c,a,b);
//c=""; //с такой строчкой работает ещё дольше.
}
stop=GetTickCount();
Print("time for 'StringConcatenate(c,a,b)' = ",(stop-start)," milliseconds, i = ",i);
输出是。
DR 0 DoubleToString (EURGBP,M1) 22:15:55 time for'c = a + b' = 2359 milliseconds, i = 10000000
QE 0 DoubleToString (EURGBP,M1) 22:15:56 time for'StringAdd(a,b)' = 1031 milliseconds, i = 10000000
FE 0 DoubleToString (EURGBP,M1) 22:16:00 time for'StringConcatenate(c,a,b)' = 3891 milliseconds, i = 10000000
////////////////////////////////////////////////////////////////////////////////// Global variables, used in working the trade system //////////////////////////////////////////////////////////////////////////////////string a="Пример";
double b=1.26,c = 1.27;
string d;
uint start,stop;
long i,length=10000000;
////////////////////////////////////////////////////////////////////////////////voidOnStart()
{
//----------------------------------------------------------------------------////Work variables//----------------------------------------------------------------------------//
start=GetTickCount();
for(i=0;i<length;i++)
{
d=a+(string)b+(string)c;
}
stop=GetTickCount();
Print("time for 'd = a + b + c' = ",(stop-start)," milliseconds, i = ",i);
//Второй способ
d= "";
start=GetTickCount();
for(i=0;i<length;i++)
{
StringAdd(d,a);
StringAdd(d,(string)b);
StringAdd(d,(string)c);
}
stop=GetTickCount();
Print("time for 'StringAdd()' = ",(stop-start)," milliseconds, i = ",i);
//Третий способ
d= "";
start=GetTickCount();
for(i=0;i<length;i++)
{
int k=StringConcatenate(d,a,b,c);
}
stop=GetTickCount();
Print("time for 'StringConcatenate(d,a,b,c)' = ",(stop-start)," milliseconds, i = ",i);
//----------------------------------------------------------------------------//
}
////////////////////////////////////////////////////////////////////////////////
而这个结果
2011.04.1515:28:58123 (EURUSD,D1) time for'd = a + b + c' = 81094 milliseconds, i = 100000002011.04.1515:30:24123 (EURUSD,D1) time for'StringAdd()' = 85828 milliseconds, i = 100000002011.04.1515:31:46123 (EURUSD,D1) time for'StringConcatenate(d,a,b,c)' = 81812 milliseconds, i = 100000002011.04.1515:33:36123 (EURUSD,D1) time for'd = a + b + c' = 82938 milliseconds, i = 100000002011.04.1515:35:00123 (EURUSD,D1) time for'StringAdd()' = 83859 milliseconds, i = 100000002011.04.1515:36:21123 (EURUSD,D1) time for'StringConcatenate(d,a,b,c)' = 80719 milliseconds, i = 10000000
很奇怪。你需要MQL5的代码,这应该已经在网站上了。你所要做的就是查一查。这正是我所说的。
但这取决于你。
这是一个非常繁琐的搜索,也许有人会直接告诉你。
顺便说一下,我已经为mql5重新制作了这个代码。也许有人可以使用它。
请发表意见。
enum_trade_return_codes
代码 ID 说明
10004 TRADE_RETCODE_REQUOTE 请求被拒绝
10006 TRADE_RETCODE_REJECT 请求被拒绝
...
没有代码10005。这不是一个错误吗?
恭敬地...
问题。有一个叫GetTickCount() 的函数-- 它返回 系统启动后经过的毫秒数。说明中说,"计数受系统定时器的分辨率限制 。由于时间被存储为无符号整数,当计算机连续运行时,它每49.7天就会溢出 "。
那么在计数器溢出后会发生什么?它是否重置并开始新的倒计时,还是系统冻结了?
Yedelkin:
当计数器溢出时会发生什么?它是重置并开始新的计数还是系统停止?
它溢出并从头开始。
问题。switch(expression){...}的描述说,"切换 操作符的表达式 必须是整数类型"。 我在互联网上看到这个运算符与其他类型的表达式的描述。开关运算符的使用是否会通过增加字符串类型的表达式来扩展?
问题。switch(expression){...}的描述说,"切换 操作符的表达式 必须是整数类型"。 我在互联网上看到这个运算符与其他类型的表达式的描述。我们将通过增加字符串类型的表达式来扩展开关运算符的使用吗?
不,不幸的是,它不会。对于字符串类型,只有在...否则,如果...否则 .
在switch中使用整数类型,将使switch操作者的速度提高数倍,如果
不,不幸的是,它不会。对于字符串类型,只有在...否则,如果...否则
在switch中使用整数类型 将使代码的速度提高数倍于如果
问题。StringConcatenate() 函数描述说:"由于不使用字符串类型的 临时变量,StringConcatenate()比通过加法运算的字符串连接工作得更快、更节省内存"。我使用了《参考手册》中的例子,对它们稍作改动。
输出是。事实证明,StringConcatenate的 工作速度比使用加法运算的字符串绑定慢。问题是什么?
问题。StringConcatenate() 函数描述说:"由于不使用字符串类型的 临时变量,StringConcatenate()比通过加法运算的字符串连接工作得更快、更节省内存"。我使用了《参考》中的例子,对它们进行了一些改变。
我得到了输出。事实证明,StringConcatenate的 工作速度比使用加法运算的字符串绑定慢。有什么障碍?
这是一个有点名不副实的检查(如果我理解正确的话)。该功能的诀窍是别的东西...
大约是这样的代码
而这个结果
PS
最有可能的是,这一行d=""应该放在for循环中,但我不认为这个bug对结果有什么影响。