错误、漏洞、问题 - 页 2746 1...273927402741274227432744274527462747274827492750275127522753...3184 新评论 fxsaber 2020.05.21 10:02 #27451 Koldun Zloy: 不,它在编译时还不知道。 那么当SymbolInfoTick被调用 数百亿次时,它如何帮助避免大量的检查? Koldun Zloy 2020.05.21 10:10 #27452 fxsaber: 那么当SymbolInfoTick被调用 数百亿次时,它如何帮助避免大量的检查? 它没有。它只是有助于不不必要地复制字符串本身。 fxsaber 2020.05.21 10:18 #27453 Koldun Zloy:没有。它只是有助于不不必要地复制字符串本身。 那么,如果想从优化器中获得更多的效率,显然SymbolInfo函数 的字符串引用方案是正确的。 Mihail Matkovskij 2020.05.21 10:29 #27454 我的调试器拒绝在我的一个项目中工作。此外,它的行为也很难预测。有时它就是拒绝进入断点。它还拒绝进入一些功能。起初我以为原因是更新(也许是调试时出了问题)。但在其他更简单的程序中,一切似乎都在运作。不过我没怎么检查,因为我在做我的主要项目。它相当复杂,只包括我自己设计的15个模块(我没有计算标准模块的数量)。主模块最多包含2000行。我想也许这都是关于项目的复杂性......另外,在一些地方,我使用宏来处理重复的代码片段。我还使用了标准的UI元素,如CAppDialog、CCheckGroup、CComboBox、CButton等,我根据我的程序功能重新编写了这些元素。也许因为它们的存在,调试不成功......例如,我专门写的CCheckGroup::itemCheckState(const string item)方法就没有被调试出来。该方法找到复选框的项目并检查它是否被选中(其状态)。 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CCheckGroup::itemCheckState(const string item) { int total = m_strings.Total(); if(total != m_states.Total()) return -1; int i = 0; for(; i < total; i++) { if(m_strings.At(i) == item) return m_states.At(i); } return -1; } 这就是我最终得到的用户界面。 一些用户界面元素被暂时分类。这里有一个分支,我描述了我如何覆盖CAppDialog元素的Show()和Hide()方法:https://www.mql5.com/ru/forum/338301 编译器在那一刻抱怨了,发生了一个关键错误。 最后,该项目编译正常,编译器没有产生任何错误。但调试失败,只是没有显示一些代码片段、函数、方法等的执行。 据我所知,这可能有几个原因。 项目的复杂代码,使用宏 使用标准UI元素的复杂代码,如CAppDialog、CCheckGroup、CComboBox、CButton(我还为它们写了新的方法并重新定义了一些现有的方法)。 与新版本有关的调试器错误(可能,不太可能)。 建设和系统信息。 2020.05.21 09:35:09.325 Terminal MetaTrader 5 x64 build 2433 started for MetaQuotes Software Corp. 2020.05.21 09:35:09.326 终端 Windows 10 build 14393, Intel Core i5-5200U @ 2.20GHz, 2 / 3 Gb内存, 61 / 380 Gb磁盘, IE 11, UAC, GMT+2 有没有人在调试器方面遇到过类似的问题,可能是什么原因? Alexey Navoykov 2020.05.21 10:51 #27455 fxsaber: 那么很明显,如果想要从优化器中获得更多的效率,那么SymbolInfo函数的字符串引用解决方案是正确的。 反正所有的东西都是通过引用传递的。 区别只在古老的MQL4中。而且在读取字符串时没有检查。 fxsaber 2020.05.21 11:14 #27456 Alexey Navoykov: 这个链接没有任何意义,开发者是这么说的。 一切都由链接原封不动地传递。 唯一的区别是在古代的MQL4。而且在读取字符串时没有任何检查。 做出这样的声明才是累人的。 int f1( string Str ) { return((Str += Str) == Str); } int f2( string &Str ) { return((Str += Str) == Str); } int Bench1( const int Amount = 1 e8 ) { int Res = 0; string Str = NULL; for (int i = 0; i < Amount; i++) Res += f1(Str); Print(Res); return(Res); } int Bench2( const int Amount = 1 e8 ) { int Res = 0; string Str = NULL; for (int i = 0; i < Amount; i++) Res += f2(Str); Print(Res); return(Res); } void OnStart() { BENCH(Bench1()) BENCH(Bench2()) BENCH(Bench1()) BENCH(Bench2()) } 100000000 Time[Bench1()] = 727585 100000000 Time[Bench2()] = 657464 100000000 Time[Bench1()] = 794205 100000000 Time[Bench2()] = 670440 Mihail Matkovskij 2020.05.21 11:24 #27457 fxsaber: 做出这样的声明只会让人厌烦。 也许这更容易写。 int f1( string Str ) { return(Str == NULL || Str == ""); } ?... 为什么要喝这样的东西? int f1( string Str ) { return((Str += Str) == Str); } fxsaber 2020.05.21 11:27 #27458 Mihail Matkovskij: 这可能更容易写。 有一种不同的讨论。 TheXpert 2020.05.21 11:36 #27459 fxsaber: 做出这样的声明才是累人的。 为了避免不被证实,请给我一个字符串不改变 的基准。 fxsaber 2020.05.21 11:42 #27460 TheXpert: 为了避免不被证实,请给我一个测试的基准,即字符串不改变 的测试。 int f1( const string Str ) { return(Str + "1" != Str); } int f2( const string &Str ) { return(Str + "1" != Str); } 10000000 Time[Bench1()] = 334596 10000000 Time[Bench2()] = 338559 10000000 Time[Bench1()] = 384711 10000000 Time[Bench2()] = 344346 1...273927402741274227432744274527462747274827492750275127522753...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
不,它在编译时还不知道。
那么当SymbolInfoTick被调用 数百亿次时,它如何帮助避免大量的检查?
那么当SymbolInfoTick被调用 数百亿次时,它如何帮助避免大量的检查?
它没有。它只是有助于不不必要地复制字符串本身。
没有。它只是有助于不不必要地复制字符串本身。
那么,如果想从优化器中获得更多的效率,显然SymbolInfo函数 的字符串引用方案是正确的。
我的调试器拒绝在我的一个项目中工作。此外,它的行为也很难预测。有时它就是拒绝进入断点。它还拒绝进入一些功能。起初我以为原因是更新(也许是调试时出了问题)。但在其他更简单的程序中,一切似乎都在运作。不过我没怎么检查,因为我在做我的主要项目。它相当复杂,只包括我自己设计的15个模块(我没有计算标准模块的数量)。主模块最多包含2000行。我想也许这都是关于项目的复杂性......另外,在一些地方,我使用宏来处理重复的代码片段。我还使用了标准的UI元素,如CAppDialog、CCheckGroup、CComboBox、CButton等,我根据我的程序功能重新编写了这些元素。也许因为它们的存在,调试不成功......例如,我专门写的CCheckGroup::itemCheckState(const string item)方法就没有被调试出来。该方法找到复选框的项目并检查它是否被选中(其状态)。
这就是我最终得到的用户界面。
一些用户界面元素被暂时分类。这里有一个分支,我描述了我如何覆盖CAppDialog元素的Show()和Hide()方法:https://www.mql5.com/ru/forum/338301 编译器在那一刻抱怨了,发生了一个关键错误。
最后,该项目编译正常,编译器没有产生任何错误。但调试失败,只是没有显示一些代码片段、函数、方法等的执行。
据我所知,这可能有几个原因。
建设和系统信息。
2020.05.21 09:35:09.325 Terminal MetaTrader 5 x64 build 2433 started for MetaQuotes Software Corp.
2020.05.21 09:35:09.326 终端 Windows 10 build 14393, Intel Core i5-5200U @ 2.20GHz, 2 / 3 Gb内存, 61 / 380 Gb磁盘, IE 11, UAC, GMT+2
那么很明显,如果想要从优化器中获得更多的效率,那么SymbolInfo函数的字符串引用解决方案是正确的。
这个链接没有任何意义,开发者是这么说的。 一切都由链接原封不动地传递。 唯一的区别是在古代的MQL4。而且在读取字符串时没有任何检查。
做出这样的声明才是累人的。
做出这样的声明只会让人厌烦。
也许这更容易写。
?...
为什么要喝这样的东西?
这可能更容易写。
有一种不同的讨论。
做出这样的声明才是累人的。
为了避免不被证实,请给我一个测试的基准,即字符串不改变 的测试。