Algoritmos, métodos de solución, comparación de su rendimiento - página 6

 
Alexandr Andreev:

¿Qué hay de malo en una matriz normal de ints? ¿Por qué el tongs....

Porque no sabemos de antemano cuántas operaciones hará el EA. Tenemos que asignar memoria para el array por adelantado, pero no sabemos cuánto.

Así que teníamos que encontrar una solución que fuera rápida y breve y que no ocupara una memoria innecesaria.

 
Реter Konow:

La verdad es que no.

...

Una vez más, no entiendes de qué estamos hablando. El número de operación es asignado por el sistema de negociación (MetaTrader o bolsa). Por número de operación no se entiende el número de serie de la operación, sino precisamente el ticket devuelto por la funciónHistoryDealGetTicket. Así que tenlo en cuenta y modifica tu ejemplo.
 
Alexandr Andreev:

De nuevo, imagina que en lugar de una cadena utilizas una clase para almacenar una matriz dinámica de gráficos - ¿y crees que esto es rápido?

No conozco el funcionamiento interno de las funciones de cadena, pero las mediciones de velocidad de las funciones muestran que se tarda menos de 100 microsegundos en encontrar y devolver un medjic de una cadena de miles de medjics.

Eso me parece muy rápido. Es poco probable que sea más rápido.

 
Реter Konow:

Porque no sabemos de antemano cuántas operaciones hará el EA. Necesitamos asignar memoria para el array por adelantado, pero no sabemos cuánto.

Por eso teníamos que encontrar una solución que fuera rápida y breve y que no ocupara una memoria innecesaria.

Sobre la rapidez. Mide la velocidad de extracción de los 24000 mil medjics. Se llevará una desagradable sorpresa.

 
Реter Konow:

Hecho:

Su ejemplo ya no se puede arreglar :)

¿Qué pasa si no tienes suficiente tamaño de fila?

Su ejemplo puede tener 32767 registros (transacciones), así que intente comparar el último magik escrito y leído.


 
Vasiliy Sokolov:
Una vez más, no entiendes de qué estamos hablando. El sistema de negociación (MetaTrader o bolsa) asigna un número de operación. Por número de trato no se entiende el número de serie del trato, sino precisamente el ticket, devuelto por la funciónHistoryDealGetTicket. Así que, teniéndolo en cuenta, modifica tu ejemplo.

No es un problema. Mañana haré una segunda versión que funcione con el billete.

Esta variante también es conveniente en el comercio.

 
Vasiliy Sokolov:

En la cuenta rápida. Mide la velocidad de recuperación de los 24.000.000 de medjits. Te llevarías una desagradable sorpresa.

Bueno, en un momento dado, sólo necesitamos un medjic, ¿no?

Extraer un medjack, acceder a cualquier información relacionada con el pedido.

¿Por qué tenemos que extraer 24.000 medjiks a la vez?

 

¿Qué demonios estoy haciendo aquí? ¿Con quién estoy perdiendo el tiempo? Será mejor que vaya a tomar un trago más fuerte.

p.s. Oh, sí, tienes un error más. Si MathRand en la tercera llamada devuelve, por ejemplo, el número 1000 y escribe _3_1000_, ¿qué tipo de medjic se encontrará para un trato con el número ordinal 1000?
 
Yury Kulikov:

Tu ejemplo no se puede arreglar ahora :)

¿Qué pasa si no tienes suficiente tamaño de fila?

Su ejemplo puede tener 32767 registros (transacciones), así que intente comparar el último magik escrito y leído.


Gracias por señalar el límite de longitud de las líneas.

Puedes empezar a escribir la segunda línea. Luego el tercero y así sucesivamente... :)

 
Реter Konow:

No conozco la implementación interna de las funciones de cadena, pero una medición del tiempo de ejecución de la función muestra que se tarda menos de 100 microsegundos en encontrar y devolver un medjic de una cadena total de miles de medjics.

Creo que es muy rápido. No creo que pueda ser más rápido.


bueno, en pocas palabras una cadena de un carácter es unchar con algún código de 0 a 255 y pesa 1 byte... y tiene asignada la memoria suficiente para que quepan 256 valores, 257 no caben ahí, volverá a la primera.

En cualquier página, cada carácter es un número del 0 al 255... así que tomamos el número 10000000 - pesa 4 bytes, lo convertimos en la cadena "10000000" luego para cada carácter asignamos memoria como para un gráfico individual de 0 a 255... 8 bytes en total. No hay ahorro de memoria en ninguna parte.