Тестируем CGraphic - вопросы и предложения - страница 7

 

дебаг с заходом в каждую функцию сможет локализовать траблу нормально и в СД поставишь задачу

по ощущениям ошибка в вычислении размера канваса гигабайтное полотно пытается пересоздасться

или же создается огромный массив в каком то зацикле

 
o_o:

дебаг с заходом в каждую функцию сможет локализовать траблу нормально и в СД поставишь задачу

по ощущениям ошибка в вычислении размера канваса гигабайтное полотно пытается пересоздасться

или же создается огромный массив в каком то зацикле


Скорее это: "... создается огромный массив в каком то зацикле", так как я точно видел на массиве из 300 элементов ПОЖИРАНИЕ оперативки. Пока ноут "дышал" успел увидеть 5 Гб.

Проблема только плавающая - хоть ставь видеозапись сторонней камерой того, что происходит на экране - чтобы отловить какие комбинации приводят к фатальному результату.

 

не воспроизвелось у меня

...
      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:

не воспроизвелось у меня



У меня ведь тоже нет чёткого воспроизведения. Вот сейчас увидел такое:

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

Не в этом ли загвоздка?

 
нет, это наоборот хорошо )
 
o_o:
нет, это наоборот хорошо )

Это без разницы. Нормальный компилятор такие оптимизации сам должен делать.

А по описанию возникает подозрение что проблема именно с утечкой памяти и возможно вообще не в коде.

 
o_o:
нет, это наоборот хорошо )

Исправил на привычное i++ и скомпилировал более развёрнутый код = снова 5 Гб :). Код позже дам, пока висим...
 
Vladimir Karputov:


Скорее это: "... создается огромный массив в каком то зацикле", так как я точно видел на массиве из 300 элементов ПОЖИРАНИЕ оперативки. Пока ноут "дышал" успел увидеть 5 Гб.

Проблема только плавающая - хоть ставь видеозапись сторонней камерой того, что происходит на экране - чтобы отловить какие комбинации приводят к фатальному результату.

Добрый день!

Причина зависания в отключение автомаштобирования: xAxis.AutoScale(false)

При этом у вас в массиве arrX хранятся значения в очень большом диапазоне:

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

И вы не меняете значение шага для дробления оси при выставления подписи my_graphic.XAxis().DefaultStep(), а так как по-умолчанию он равен 25.0, то количество подписей , которое пытается сгенерировать библиотека равно:

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

Что и приводит к зависанию, есть два варианта:

  1. Оставить автомаштобирование
  2. Передавать адекватное значение в метод my_graphic.XAxis().DefaultStep(), для смены шага по-умолчанию (у меня для дробления на 10 частей получилось значение 50878800.0)
 
Vladimir Karputov:

Исправил на привычное i++ и скомпилировал более развёрнутый код = снова 5 Гб :). Код позже дам, пока висим...


Где-то здесь:

Собака порылась где-то здесь

беда. Я только этими строками балуюсь.

Файлы:
 
Roman Konopelko:

Добрый день!

Причина зависания в отключение автомаштобирования: xAxis.AutoScale(false)

При этом у вас в массиве arrX хранятся значения в очень большом диапазоне:

И вы не меняете значение шага для дробления оси при выставления подписи my_graphic.XAxis().DefaultStep(), а так как по-умолчанию он равен 25.0, то количество подписей , которое пытается сгенерировать библиотека равно:

Что и приводит к зависанию, есть два варианта:

  1. Оставить автомаштобирование
  2. Передавать адекватное значение в метод my_graphic.XAxis().DefaultStep(), для смены шага по-умолчанию (у меня для дробления на 10 частей получилось значение 50878800.0)


Спасибо! Вырезал (убрал) строки вообще с AutoScale и с заданием шага.


И сразу пожелание: я могу сделать наклонный (под углом) шрифт СРАЗУ для двух осей (my_graphic.FontSet("Arial",10,0,180);). Нельзя ли сделать такой метод установки шрифта (или угла) для отдельной оси?

Файлы:
Причина обращения: