这可以处理100.000值吗?

时间:2018-01-19 15:46:18

标签: javascript teechart

我的Teechart有javascript问题。 我想在我们的主页上使用Teechart来显示一个约500.000值的折线图。

我的代码最多可以处理100.000个值,之后会出现错误“超出最大调用堆栈大小”

teechart.js:72 Uncaught RangeError: Maximum call stack size exceeded
at C (teechart.js:72)
at Tee.Line.Tee.Series.minYValue (teechart.js:130)
at teechart.js:76
at I.eachAxis (teechart.js:134)
at I.minYValue (teechart.js:76)
at x.checkMinMax (teechart.js:39)
at x.adjustRect (teechart.js:113)
at Q.each (teechart.js:79)
at Tee.Chart.draw (teechart.js:150)
at k (teechart-extras.js:24)

我是Javascript的初学者这是我的第一次测试,但我找不到问题。 我正在使用Teechart VCL,没有任何问题可以显示这么多的值。

TeeChart for Javascript可以处理这么多值吗?

function draw() {
  Chart1=new Tee.Chart("canvas");
  Series=new Tee.Line(Chart1);
  Chart1.addSeries(Series);

  Series.addRandom(200000);

  Chart1.axes.left.title.text="[hPa]";
  Chart1.axes.bottom.title.text="Date/Time";
  Chart1.axes.bottom.labels.dateFormat = "dd.mm.yy hh:mm";

  Chart1.series.items[0].marks.drawEvery=120;
  Chart1.title.visible = false;
  Chart1.legend.visible = false;
  changeTheme(Chart1, "minimal");
  Chart1.draw();
}

2 个答案:

答案 0 :(得分:0)

我对teechart一无所知,但错误信息实际上相当清楚。

每种语言都使用"调用堆栈"管理调用函数。每次调用一个函数时,都必须保存当前执行环境(所有局部变量,接下来应该执行哪一行等),并且必须为被调用函数设置一个新的执行环境(其参数) ,局部变量等)。如果该被调用的函数然后调用另一个函数,那么它的当前执行环境也需要保存。

要管理保存所有这些信息,我们使用堆栈。当您拨打电话时,您的信息将保存到堆栈中。当该函数调用另一个函数时,它会被压入堆栈。当它解决它的执行时,它会在你之前被拉掉,当你的函数完成执行时你会被拉出堆栈。

现在为您解决问题。每次我们将一个新的函数调用推送到堆栈上,这需要一些内存。小,但还在那里。但是调用堆栈使用的内存有限。因此,如果一个函数调用一个函数调用一个函数....并且我们深深地嵌入到函数调用中,那么调用堆栈就会耗尽内存。一旦发生这种情况,如果您再次尝试呼叫,则计算机在物理上无法正确执行该命令,因此会发生此错误。

那么我们应该怎么做呢?

  1. 在您的代码中的任何地方,您都有一个递归函数调用,该函数调用过于深入。

  2. 或teechart中的某个地方有一个使用递归的函数,你传递给它的一些值会导致它过于递归。

  3. 问题'函数可能看起来像这样:

    function recurse_x_times(x) {
      if (x < 1) {
        return;
      }
      // do some other stuff
      return recurse_x_times(x-1);
    }
    

答案 1 :(得分:0)

我已将此问题重现,因此我已将其添加到公共跟踪器(#1976)。 而且我已经为下一次维护版本修复了它。