Prueba CGraphic - preguntas y sugerencias - página 7

 

La depuración de cada función puede localizar el problema correctamente y establecer una tarea en la SD

parece que hay un error en el cálculo del tamaño del lienzo un lienzo gigabyte está tratando de recrear

o se crea un enorme array en algún tipo de bucle

 
o_o:

La depuración de cada función puede localizar el problema correctamente y establecer una tarea en la SD

parece que hay un error en el cálculo del tamaño del lienzo un lienzo gigabyte está tratando de recrear

O crea un enorme array en algún tipo de bucle


Más como esto: "...crea un array enorme en algún tipo de bucle", ya que definitivamente he visto un array de 300 elementos VIVO en la RAM. Mientras el portátil "respiraba" conseguí ver 5GB.

El problema es que sólo flota - al menos poner la grabación de vídeo de lo que sucede en la pantalla - para captar qué combinaciones conducen a resultados fatales.

 

no me ha funcionado

...
      CCurve *curve_b=my_graphic.CurveAdd(arrX,arrY,CURVE_LINES,"Close");
      CAxis *xAxis=my_graphic.XAxis();           // получаем ось X
      //---попеременно комбинирую (комментировать, раскоментировать) строки 87
      //--- и 88 можно словить момент поглощения памяти и зависания компьютера
      //xAxis.AutoScale(false); 
      //xAxis.Type(AXIS_TYPE_DATETIME); 
->    my_graphic.CurvePlotAll();
      my_graphic.Update();
...


 
o_o:

No puedo reproducirlo.



Yo tampoco tengo una reproducción clara. Acabo de ver esto:

      for(int i=0; i<size;++i)

¿No es ese el problema?

 
No, es al revés).
 
o_o:
No, es bueno al contrario )

No hay ninguna diferencia. Un compilador normal debería hacer estas optimizaciones por sí mismo.

A juzgar por la descripción, tenemos la sospecha de que el problema está en una fuga de memoria y tal vez no en el código en absoluto.

 
o_o:
No, es lo contrario de bueno )

Lo he arreglado con el i++ habitual y he compilado más código expandido = 5GB de nuevo :). Daré el código más tarde, mientras estamos rondando...
 
Vladimir Karputov:


Esto es más probable: "...crea un array enorme en algún tipo de bucle", ya que definitivamente he visto un array de 300 elementos CAUSANDO RAM. Mientras el portátil "respiraba" conseguí ver 5GB.

El problema es sólo flotante -también se podría poner un vídeo de cámara de terceros de lo que está sucediendo en la pantalla- para captar qué combinaciones conducen a un resultado fatal.

¡Buenas tardes!

La razón del cuelgue es la desactivación de la costura automática: xAxis.AutoScale(false)

En este caso tienes un rango muy grande de valores almacenados en el array arrX:

double MAX = arrX[ArrayMaximum(arrX)]; // 1497438000.0
double MIN = arrX[ArrayMinimum(arrX)]; // 988653600.0

Y no se cambia el valor del paso para dividir el eje al poner la firma my_graphic.XAxis().DefaultStep(), y como es 25.0 por defecto, el número de firmas que la librería intenta generar es igual:

m_xsize=(int)MathRound((max-min)/step)+1; // 20351377

Lo que nos lleva a un cuelgue, hay dos opciones:

  1. Deja la autocalificación.
  2. Transmitir un valor adecuado al método my_graphic.XAxis().DefaultStep(), para cambiar el paso por defecto (obtuve el valor 50878800.0 para dividir en 10 partes)
 
Vladimir Karputov:

Corregido a i++ familiar y compilado más código expandido = 5GB de nuevo :). Daré el código más tarde, mientras cuelgo...


En algún lugar de aquí:

El perro está aquí en alguna parte

problemas. Sólo estoy estropeando estas líneas.

Archivos adjuntos:
 
Roman Konopelko:

¡Buenas tardes!

La causa del cuelgue es la desactivación del auto-stepping: xAxis.AutoScale(false)

Tienes un rango muy grande de valores almacenados en el array arrX:

Y no se cambia el valor del paso para dividir el eje al poner la firma my_graphic.XAxis().DefaultStep(), y como es 25.0 por defecto, el número de firmas que la librería intenta generar es igual:

Lo que nos lleva a un cuelgue, hay dos opciones:

  1. Para dejar la auto-agregación.
  2. Pasar un valor adecuado al método my_graphic.XAxis().DefaultStep(), para cambiar el paso por defecto (obtuve un valor de 50878800.0 para una división de 10 partes)


Gracias. Cortar (eliminar) las líneas con Autoescala y con la configuración del paso en general.


E inmediatamente una sugerencia: puedo hacer una fuente inclinada (en ángulo) para ambos ejes a la vez (my_graphic.FontSet("Arial",10,0,180);). ¿No podemos hacer este método de ajuste de la fuente (o del ángulo) para un eje separado?

Archivos adjuntos: