MT5 RAM内存贪婪,读/写大文件的问题 - 页 2

 
Vladislav Andruschenko:


我以前就遇到过这个问题。我做了很多修复工作。我不记得所有的事情--那是一个一次性的任务。

但是尝试设置ArrayResize(arrRead_01,arrSize);这里的第三个参数是


intreserve_size=0//储备大小值(过量)。


和实验。

谢谢你,但从我的实验来看,所有的滞后和内存消耗都发生在从文件中读取信息的环节。也许那里可以调整一些东西?

 
我也非常希望得到第二个问题的帮助--录音限制,有人解决了这个问题吗?
 

从内存重新分配的速度来看,字符串的数组是作为对象的数组来存储的,而不是指向对象的指针,因此要刹车。我们需要开发者澄清这个问题,解决方案取决于此。

然后,解析器从字符串中创建一个本地单元数组,然后将它们复制到分配的内存 中,这是一个不必要的拐杖,而且是一个重要的拐杖。

如果是一个对象的数组--那么,根据问题中单元格的更新频率和数量,在加载时不解析文件,而将xw-file存储为文件行数组并在运行中更新数据(即在每次访问单元格时解析字符串),可能在时间上会更便宜。无论如何,分析器需要重写,它的效率极低,不支持带引号的单元格,只适用于导入数字表。

 
SeriousRacoon:

从内存重新分配的速度来看,字符串的数组是作为对象的数组来存储的,而不是指向对象的指针,因此要刹车。我们需要开发人员澄清这个问题,解决方案取决于此。

让我们试着给开发者打电话,@Renat Fatkhullin- 你能澄清一下情况吗?

SeriousRacoon:

然后,解析器从字符串中创建一个本地单元数组,然后将它们复制到分配的内存 中--这是一个不必要的拐杖,而且是一个重要的拐杖。

我们如何才能摆脱它?

SeriousRacoon:

如果作为对象的数组,根据问题中单元格更新的频率和数量,可能不在加载时解析文件,而将xw-file存储为文件行数组并在运行中更新数据(即在每次访问单元格时解析字符串),在时间上会更便宜。无论如何,分析器需要重写,它的效率极低,不支持带引号的单元格,只适合导入数字表。

"文件行数组" - 你是什么意思?如果只是创建一个数组来存放所有的字符串,那么据我所知,字符串的长度有一个字符限制,不是吗?

阅读课是由MQ的员工写的,我以为那里都是智慧的写法。

解析器正确读取文本,我不同意你的观点--之前附上的脚本证实了这一点。

 
Aleksey Vyazmikin:

让我们试着给开发者打电话,@Renat Fatkhullin- 你能澄清一下情况吗?

你怎么能摆脱它呢?

"文件字符串数组" - 你是什么意思?如果只是创建一个数组,将所有的字符串写入其中,那么据我所知,字符串的长度有一个字符限制,不是吗?

阅读课是由MQ的员工写的,我以为那里都是智慧的写法。

解析器正确读取文本,我不同意你的观点--之前附上的脚本证实了这一点。

它能正确地读取没有引号的字符串的文件,其中有一个分界符。尝试用它来阅读60;""样本;字符串""。输出应包含2个单元格:[60]和[样本;字符串]。你可能会得到3-[60]["样本;字符串"]。(此外,qusv允许连字符的字符串:) )

我知道在C或pluses中如何摆脱这种情况--先分配一个字符串指针数组,然后通过解析字符串来填充它。mcl中没有指针,我不明白如何处理这个任务。希望雷纳特能够澄清。

"一个文件字符串的数组" - 你是什么意思?如果只是创建一个将包含所有字符串的数组,那么据我所知,字符串的长度有一个字符限制,不是吗?

我的意思是,逐行读取文件,并将文件的每一原始行存储在一个数组中,而不对其进行解析。当通过格式(行,列)访问字符串时,采取字符串行,即时解析它并给出列值,同时缓存解析结果。

 

这里是另一个可能的解决方案。当读一个文件时,做一个解析--为每一行保存一个由两个整数值组成的数组:该行中的单元格值开始的字符索引,以及该子串的长度。

比如说。

строка в файле : 54;345;12;12345
индекс символа : 0  3   7  10
длина подстроки: 2  3   2  5

这里是指数和长度的值,并保存它们以便在需要时进一步解析。
 
SeriousRacoon:

它能正确地读取那些没有带引号的字符串的文件,而这些字符串里面有一个分隔符。试着用它读取60;""样本;字符串""。输出应该是2个单元格:[60]和[样本;字符串]。你可能会得到3-[60]["样本;字符串"]。(此外,qusv允许连字符的字符串:) )

哦,我明白了,我不知道CSV标准的这种微妙之处。谢谢你对我的启发,让我了解到了这些奇特之处。

SeriousRacoon:

我知道在C或pluses中如何摆脱它--我会先分配一个字符串指针数组,然后填入它,解析字符串。mcl中没有指针,我不明白如何处理这个任务。希望雷纳特能够澄清。

希望雷纳特能够澄清。

SeriousRacoon:

我的意思是,逐行读取文件,并将文件的每一原始行存储在一个数组中,而不对其进行解析。当通过格式(row,column)访问字符串时,取字符串row,即时解析并返回column的值,缓存解析的结果。

是的,我认为这在时间上是最理想的,甚至缓存也不是真的需要,我想。你能帮助并对班级进行适当的编辑以实施这种方法吗?

 
SeriousRacoon:

这里是另一个可能的解决方案。当读一个文件时,做一个解析--为每一行保存一个由两个整数值组成的数组:该行中的单元格值开始的字符索引,以及该子串的长度。

比如说。

строка в файле : 54;345;12;12345
индекс символа : 0  3   7  10
длина подстроки: 2  3   2  5

这里是索引和长度值,我们保存它们,以便在需要时进一步解析。

嗯,是的,这大约就是我今天在上面写的方法--先计算什么是什么,然后再填入数组。但我不知道如何实现它 :(

 

WriteArray/Read速度很快,最大尺寸可达300mb,一切都非常快,不消耗RAM。

为什么有这么多的读/写代码,这一切都在4行中完成。

 
Maxim Dmitrievsky:

WriteArray/Read速度很快,最大尺寸可达300mb,一切都非常快,不消耗RAM。

为什么有这么多的读/写代码,这一切都在4行中完成。

关于
原因: