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;
}
}
最终收集了内存:
每当我在更新循环中使用迭代器时,我都会遇到内存泄漏问题。 例如,这里:
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;
}
}
最终收集了内存: