错误、漏洞、问题 - 页 1593 1...158615871588158915901591159215931594159515961597159815991600...3184 新评论 Vladimir Pastushak 2016.06.02 15:52 #15921 产品召回信息出现在智能手机上,而在LC和μl网站上面则没有。 Yury Kirillov 2016.06.02 17:07 #15922 神奇的脚本扭转了时间;-) Vladislav Andruschenko 2016.06.02 17:11 #15923 Vladimir Pastushak: 智能手机收到一条关于产品评论的信息,但不是在LC或mcl网站的顶部。 一直以来都是这样,我记得他们甚至要求把它放在网站上,因为当他们留下反馈时,很奇怪,甚至他们马上问你问题,你在2个月后才发现。:-) Alexey Volchanskiy 2016.06.03 08:48 #15924 不是一个错误,但忍不住要分享一下写作if((!IsRunOnTester() && TimeCurrent() >= D'2016.06.31 23:59'))// для тестировщиков, ограничение работы по времени编译器发出了一个警告无效日期 *****.mq4 115 46它还检查有效的字符串日期,我很震惊 )(6月的30天) Andriy Voitenko 2016.06.03 10:46 #15925 显然,没有人关心这个,但我还是要写。真正的任务是创建总大小约为100%空闲内存的数组,迅速用数字填满它们,进行计算并释放它们。我尝试用以下方法来获得自由内存的大小int mem_free_mb=(int)TerminalInfoInteger(TERMINAL_MEMORY_AVAILABLE);结果:23987 MB,我的物理内存是12141 MB,即一半的容量。我明白这个数字是针对火星人的,但我仍然相信它,并写了一个脚本来测试它。//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { #define PARTS 5 srand(GetTickCount()); //--- int mem_free_mb=(int)TerminalInfoInteger(TERMINAL_MEMORY_AVAILABLE); //mem_free_mb=5300;//<--- Столько показывает 'Доступной' в диспетчере задач. long mem_for_calc=(long)((double)mem_free_mb*1024*1024); long mem_one_part=(long)floor((double)mem_for_calc/PARTS); if(mem_one_part>=INT_MAX-1) mem_one_part=INT_MAX-1; //--- printf("Memory for calc: %0.f MB, parts: %d, part: %0.f MB",mem_for_calc/1024/1024,PARTS,mem_one_part/1024/1024); char array1[]; char array2[]; char array3[]; char array4[]; char array5[]; int res=ArrayResize(array1,(int)mem_one_part); Print("Array1 Resize: ",res); if(res<1)return; printf("Reserved: %0.f MB",1.0*mem_one_part/1024/1024); res=ArrayResize(array2,(int)mem_one_part); Print("Array2 Resize: ",res); if(res<1)return; printf("Reserved: %0.f MB",2.0*mem_one_part/1024/1024); res=ArrayResize(array3,(int)mem_one_part); Print("Array3 Resize: ",res); if(res<1)return; printf("Reserved: %0.f MB",3.0*mem_one_part/1024/1024); res=ArrayResize(array4,(int)mem_one_part); Print("Array4 Resize: ",res); if(res<1)return; printf("Reserved: %0.f MB",4.0*mem_one_part/1024/1024); res=ArrayResize(array5,(int)mem_one_part); Print("Array5 Resize: ",res); if(res<1)return; printf("Reserved: %0.f MB",5.0*mem_one_part/1024/1024); uint gtc=GetTickCount(); for(int i=0;i<mem_one_part;i++) { char ch=(char)rand(); array1[i]=ch; array2[i]=ch; array3[i]=ch; array4[i]=ch; array5[i]=ch; } //--- printf("Spent time: %d ms",GetTickCount()-gtc); }我得到一个逻辑结果--不可能分配Array3,因为内存已经用完。然后我取消注释行,在那里我指定现在有多少内存可用。mem_free_mb=5300;//<--- Столько показывает 'Доступной' в диспетчере задач.之后,脚本成功运行。我不想成为开发人员的麻烦,但知道有多少内存可用是很重要的。请让我们通过TerminalInfoInteger 来了解它。 Slava 2016.06.03 11:11 #15926 你是否意识到,在大多数情况下,你将无法检索到所有可用的内存?有这样一种东西,即内存碎片。你决定将所有的内存分成5个片段--而系统没有一个不间断的内存片段的大小是你需要的。 Andriy Voitenko 2016.06.03 11:33 #15927 Slawa:你是否意识到,在大多数情况下,你将无法检索到所有可用的内存?有这样一个概念--内存碎片化。你决定将所有的内存分成5个片段--但是系统没有一个你需要的连续内存片段。1.你能不能先弄清楚TERMINAL_MEMORY_AVAILABLE 这个参数的物理含义?2.关于片段,我认为这应该由Windows内存管理器处理,而不是由程序员处理。我需要知道在某一时刻我可以使用多少,例如,我想使用50%的可用内存。另一个真正的任务是CopyTicks请求。如果你请求的点数超过可用的内存,你就会得到 "内存不足"。 coderex 2016.06.03 11:58 #15928 Andrey Voytenko:另一个真正的挑战是CopyTicks请求。如果你请求的点数超过可用的内存,你就会得到 "内存不足"。 或者,将数据卸载到一个文件中,然后从那里提取所需的片段 Andriy Voitenko 2016.06.03 12:38 #15929 coderex: 或者,将数据上传到一个文件中,然后从那里提取所需的片段。这对我来说很慢。我想通过记忆做一切事情。实际上现在已经在做了,但我必须调用GlobalMemoryStatusEx来找出可用内存的大小。 Alexey Navoykov 2016.06.03 12:58 #15930 Andrey Voytenko:在云代理上进行优化时,这个问题尤其严重,因为你从一开始就对其能力一无所知。 无论是通过MQL,还是通过WinApi(因为禁止调用dll),都不可能确定那里的真实可用内存量。那就真的不清楚TERMINAL_MEMORY_AVAILABLE有什么实际意义了? 如果它既不会让我们高兴也不会让我们不高兴,我们为什么要引入它? 1...158615871588158915901591159215931594159515961597159815991600...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
神奇的脚本扭转了时间;-)
智能手机收到一条关于产品评论的信息,但不是在LC或mcl网站的顶部。
不是一个错误,但忍不住要分享一下
写作
编译器发出了一个警告
无效日期 *****.mq4 115 46
它还检查有效的字符串日期,我很震惊 )(6月的30天)
显然,没有人关心这个,但我还是要写。
真正的任务是创建总大小约为100%空闲内存的数组,迅速用数字填满它们,进行计算并释放它们。
我尝试用以下方法来获得自由内存的大小
结果:23987 MB,我的物理内存是12141 MB,即一半的容量。
我明白这个数字是针对火星人的,但我仍然相信它,并写了一个脚本来测试它。
我得到一个逻辑结果--不可能分配Array3,因为内存已经用完。
然后我取消注释行,在那里我指定现在有多少内存可用。
之后,脚本成功运行。
我不想成为开发人员的麻烦,但知道有多少内存可用是很重要的。
请让我们通过TerminalInfoInteger 来了解它。
你是否意识到,在大多数情况下,你将无法检索到所有可用的内存?
有这样一种东西,即内存碎片。你决定将所有的内存分成5个片段--而系统没有一个不间断的内存片段的大小是你需要的。
你是否意识到,在大多数情况下,你将无法检索到所有可用的内存?
有这样一个概念--内存碎片化。你决定将所有的内存分成5个片段--但是系统没有一个你需要的连续内存片段。
1.你能不能先弄清楚TERMINAL_MEMORY_AVAILABLE 这个参数的物理含义?
2.关于片段,我认为这应该由Windows内存管理器处理,而不是由程序员处理。
我需要知道在某一时刻我可以使用多少,例如,我想使用50%的可用内存。
另一个真正的任务是CopyTicks请求。如果你请求的点数超过可用的内存,你就会得到 "内存不足"。
另一个真正的挑战是CopyTicks请求。如果你请求的点数超过可用的内存,你就会得到 "内存不足"。
或者,将数据上传到一个文件中,然后从那里提取所需的片段。
这对我来说很慢。我想通过记忆做一切事情。实际上现在已经在做了,但我必须调用GlobalMemoryStatusEx来找出可用内存的大小。
在云代理上进行优化时,这个问题尤其严重,因为你从一开始就对其能力一无所知。 无论是通过MQL,还是通过WinApi(因为禁止调用dll),都不可能确定那里的真实可用内存量。
那就真的不清楚TERMINAL_MEMORY_AVAILABLE有什么实际意义了? 如果它既不会让我们高兴也不会让我们不高兴,我们为什么要引入它?