测试CGraphic--问题和建议 - 页 7

 

调试每个函数可以正确定位问题,并在SDA中设置一个任务。

在计算画布尺寸时,似乎有一个错误,一个千兆字节的画布正试图重新创建。

或者在某种循环中创建一个巨大的数组

 
o_o:

调试每个函数可以正确定位问题,并在SDA中设置一个任务。

在计算画布尺寸时,似乎有一个错误,一个千兆字节的画布正试图重新创建。

或者它在某种循环中创建一个巨大的数组


更多类似的情况。"......在某种循环中创建一个巨大的数组",因为我肯定见过一个300个元素的数组在RAM上运行。当笔记本电脑在 "呼吸 "时,我设法看到了5GB。

问题只是漂浮在空中--至少把屏幕上发生的事情录下来--抓住哪些组合会导致致命的结果。

 

对我来说,它没有播放

...
      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++,并编译了更多的扩展代码=5GB了:)。我稍后会给出代码,当我们在徘徊时......
 
Vladimir Karputov:


这种可能性更大。"......在某种循环中创建一个巨大的数组",因为我肯定见过一个300个元素的数组会导致RAM。当笔记本电脑在 "呼吸 "时,我设法看到了5GB。

问题只是浮动的--你不妨把正在发生的事情放在第三方摄像机的视频上--来捕捉哪些组合会导致致命的结果。

下午好!

挂起的原因是禁用了自动缝合功能: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()方法传送一个适当的值,以改变默认步长(我得到50878800.0,分成10部分)。
 
Vladimir Karputov:

修正为熟悉的i++,并编译了更多的扩展代码=5GB了:)。我稍后将给出代码,同时挂...


在这里的某个地方。

狗在这里的某个地方

麻烦。我只是在糟蹋这些台词。

附加的文件:
 
Roman Konopelko:

下午好!

挂起的原因是禁用了自动步进:xAxis.AutoScale(false)。

你有一个非常大的数值范围存储在arrX数组中。

而你在放签名my_graphic.XAxis().DefaultStep()时,并没有改变分割轴的步长值,由于它默认为25.0,所以库试图生成的签名数是相等的。

这导致了一个挂,有两个选择。

  1. 要离开自动附件。
  2. 给my_graphic.XAxis().DefaultStep()方法传递一个适当的值,以改变默认的间距(我得到的值是50878800.0,用于10部分的分割)。


谢谢!用AutoScale和一般的步骤设置切割(删除)线条。


并立即提出一个建议:我可以一次为两个轴做一个斜的(有角度的)字体(my_graphic.FontSet("Arial",10,0,180);)。我们不能让这种字体(或角度)设置方法成为一个单独的轴吗?

附加的文件: