每当我在更新循环中使用迭代器时,我都会遇到内存泄漏问题。 例如,这里:
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;
没关系:
为什么会发生这种情况,我做错了什么?
感谢。
答案 0 :(得分:1)
这是因为迭代器正在为迭代器分配内存。
一段时间后,垃圾收集器会收集内存。
我使用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;
}
}
最终收集了记忆: