Voracidad de la memoria RAM de la MT5, problemas con la lectura/escritura de archivos grandes - página 5

 
Maxim Dmitrievsky:

por lo que es un array de 2 dimensiones, una matriz. Escríbelo.

¿Puedes mostrarme un ejemplo de cómo escribir y leer matrices multidimensionales? Está claro en teoría, pero la aplicación no está clara.

 
Aleksey Vyazmikin:

¿Puedes mostrarme un ejemplo de cómo escribir y leer matrices multidimensionales? Está claro en teoría, pero la aplicación no está clara.

Al igual que las matrices unidimensionales, con WriteArray()

 
Aleksey Vyazmikin:

Me siento cómodo usando la clase, la he estado usando durante 3 años, desde MT4 - es práctico, pero maldita sea, es lento.

Por supuesto, es fácil leer una cadena, pero convertirla en una estructura celular que funcione es mucho más difícil.

¿Qué quieres decir con que no puedo utilizar las clases? Yo sí, y además, el empleado de la metacita escribió la clase. Y entonces, realmente contraté a una persona, pagué y esperé obtener un producto terminado, pero me dijeron que está bien ser lento... Les creí, pero ahora tengo demasiada memoria: estoy indignado.

La clase está diseñada para archivos pequeños. No importa en absoluto quién haya creado la clase. Ahora necesitamos un enfoque diferente para leer un archivo, por lo que la clase maneja mal ese archivo.

 
Roffild:

La clase está diseñada para archivos pequeños. No importa en absoluto quién haya creado la clase. Ahora necesitas un enfoque diferente para leer un archivo, por lo que esa clase no maneja bien ese archivo.

Lo perpetuaré. Jodido, gracias.

 
Maxim Dmitrievsky:

al igual que las unidimensionales, mediante WriteArray()

Encontré un ejemplo, tendré que probarlo, tendré que escribir dos archivos - para la comprensión general y probablemente para acelerar el procesamiento.

Gracias.

Añadido: Tengo entendido que sólo se puede escribir 1 array a la vez, lo que por supuesto no es muy conveniente.
 
Roffild:

La clase está diseñada para archivos pequeños. No importa en absoluto quién haya creado la clase. Ahora necesitas un enfoque diferente para leer un archivo, por lo que esa clase no maneja bien ese archivo.

Si mi memoria no me falla, inmediatamente dije que tenemos que trabajar con archivos grandes, y por ejemplo se dio un archivo grande - decenas de megabytes, si no un centenar (tenemos que ver la correspondencia, y en el formato actual no es conveniente hacer).

 
Aleksey Vyazmikin:

Encontré un ejemplo, tengo que probarlo, tendré que escribir dos archivos - para la comprensión general, y probablemente para acelerar el procesamiento.

Gracias.

Añadido: Tengo entendido que sólo se puede escribir 1 array a la vez, lo que por supuesto no es muy conveniente.

Muy conveniente :)

 
Maxim Dmitrievsky:

muy práctico :)

No es conveniente porque hay que crear un archivo separado para los diferentes tipos de datos.

 
Aleksey Vyazmikin:

No es conveniente, ya que hay que crear un archivo separado para los diferentes tipos de datos.

Bueno, puedes ponerlo en el mismo directorio para que no esté disperso. No tendrás ningún problema. Eso es lo que siempre hago para los expertos. Inmediatamente creo un directorio llamado nombre del programa/número de cuenta y puse todos los archivos en él.

 

Recomiendo hacer un cambio mínimo primero, para que la reasignación de memoria se haga con menos frecuencia. Dos líneas

m_total_rows++;
ArrayResize(m_cells,m_total_rows*m_total_columns,10000);

en bool CSVReader::AddData(string data_str,bool header) sustituir por

m_total_rows++;
if (m_total_rows*m_total_columns>ArraySize(m_cells)) ArrayResize(m_cells,2*m_total_rows*m_total_columns);

El número de reasignaciones de memoria con copia debería ser O(log(n,2)) en lugar de O(n). 20 en lugar de 600 mil. Tal vez eso sea suficiente para ti ahora.