Errores, fallos, preguntas - página 2195

 
Artyom Trishkin:

Saludos de fxsaber:

¿Podemos ver una imagen - qué hace (el código)?

 

Por favor, explique por qué ArrayResize es muy lento con una tarea de reserva?

Guión

// Добавление элемента в конец произвольного массива
template <typename T>
void AddElement( T &Array[], const T &Value, const int Reserve = 0 )
{
  const int Size = ::ArraySize(Array);

  ::ArrayResize(Array, Size + 1, Reserve);

  Array[Size] = Value;
}


#define  BENCH(A)                                                              \
{                                                                             \
  const ulong StartTime = GetMicrosecondCount();                              \
  A;                                                                          \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}

int Bench( const int Size, const int Reserve )
{
  const MqlTick NullTick = {0};
  MqlTick Ticks[];  
  
  for (int i = 0; i < Size; i++)
    AddElement(Ticks, NullTick, Reserve);
    
  return(ArraySize(Ticks));
}

void OnStart()
{
  BENCH(Bench(1 e7, 1 e5)); // 100 раз выделяется память
  BENCH(Bench(1 e7, 1 e6)); //  10 раз выделяется память
  BENCH(Bench(1 e7, 1 e7)); //   1 раз выделяется память
}


Resultado

Time[Bench(1 e7,1 e5)] = 38199494
Time[Bench(1 e7,1 e6)] = 3867983
Time[Bench(1 e7,1 e7)] = 479303


Asignar 100 veces la memoria (de 5 Mb a 500 Mb) lleva 38 segundos. ¿Es normal?

La aplicación práctica es en los caracteres personalizados, cuando se quiere preparar un historial de garrapatas antes de la importación. Supongamos que hay algunos archivos CSV con datos de ticks en el almacenamiento local, y usted necesita hacer un MqlTick-array de ellos. ¿Cómo hacerlo de forma óptima? Es imposible calcular de antemano la cantidad de ticks en estos archivos.

 
Rashid Umarov:

¿Podemos ver una imagen - qué hace (el código)?

 
fxsaber:

No es posible calcular de antemano el número de ticks de estos archivos.

¿Dividir el tamaño del archivo por el tamaño aproximado de una garrapata?

 
Andrey Khatimlianskii:

¿Dividir el tamaño del archivo por el tamaño aproximado de una garrapata?

Desgraciadamente, no sé el tamaño de los archivos: descomprimo el CSV de un ZIP.

 
Rashid Umarov:

¿Podemos ver una imagen? ¿Qué hace?

Hacer una captura de pantalla sobre un periodo de tiempo seleccionado ha resultado difícil - ¿quizás haya una solución de definición de anchura adecuada para capturar las barras sobre dos rangos de fechas inclusive?

 
Aleksey Vyazmikin:

Hacer una captura de pantalla sobre un periodo de tiempo seleccionado ha resultado difícil: ¿existe una solución de definición de anchura adecuada para capturar las barras sobre los dos rangos de fechas incluidos?

¿Cuál es la dificultad? Hice 2 capturas de pantalla con diferentes escalas en un script para que la captura de pantalla muestre 30 barras desde la fecha especificada.


 
fxsaber:

Lamentablemente, no sé el tamaño de los archivos - descomprimo el CSV desde el ZIP.

¿A dónde van desde el ZIP? ¿En una matriz? ¿A una cadena? También tienen una talla/longitud.

 
Alexey Viktorov:

¿Cuáles son las dificultades? Aquí hay un script hizo 2 capturas de pantalla con diferente escala para que en la pantalla fue de 30 bares de la fecha especificada.


Pon el zoom a cero, incluso ahora puedes ver que en la segunda captura de pantalla la barra ya está apretada, a diferencia de la primera.

Y qué son 30 barras, ¡que sean 600!
 
Andrey Khatimlianskii:

¿A dónde van desde el ZIP? ¿En una matriz? ¿A una cadena? También tienen una talla/longitud.

Entonces tendría que descomprimir todo y mantener cientos de megabytes de cosas descomprimidas en la memoria.

O desempacar sumando el número de cadenas (cadena - garrapata). Ahorro de memoria. Y luego descomprimir de nuevo, pero con parsing.

Razón de la queja: