FlxState.update 函数中迭代器的 Haxe 内存问题

Haxe memory issue with iterators in FlxState.update function

每当我在更新循环中使用迭代器时,我都会遇到内存泄漏问题。 例如,这里:

class Manager extends FlxState {
  public var array: Array<Int>;
  override public function create():Void {
    array = new Array();
  }

  public override function update() {
    super.update();
    /////////////////////////////////////////////////////
    //
    // ISSUE IS HERE
    // If for(item in array) line is present there's a memory
    // issue.
    //
    /////////////////////////////////////////////////////
    for(item in array) var noop:Int = 0 /* Do nothing */;
  }
}

当这是 运行 时,我将获得持续不断的内存增加。这是它在 HaxeFlixel 的调试器中的样子:

但是,如果我使用像这样的简单循环进行迭代:

for(i in (0...array.length)) var noop:Int = 0;

会好的:

为什么会这样,我做错了什么?

谢谢。

这是因为迭代器正在为迭代器分配内存。

一段时间后,垃圾收集器收集内存。

我使用 1000 个数组进行了压力测试

class Manager extends FlxState {
  public var arrays: Array<Array<Int>>;
  override public function create():Void {
    arrays = new Array();
    for (i in (0...1000)) arrays.push(new Array());
  }

  public override function update() {
    super.update();
    for (array in arrays)
      for (i in array)
        var noop:Int = 0;
  }
}

最终收集了内存: