不断创建新数组是一种不好的做法吗?

3
我在序列化的过程中使用了几个数组。这些数组的长度需要随着游戏的进行而改变。在我的“保存”方法中,我目前通过以下代码创建一个新的数组:
int intArray = new int[specifiedLength];
这种做法被认为是不好的吗?还是旧的数组可以很容易地清理掉?
编辑:我的“保存”方法每1-2分钟调用一次。

3
真的取决于数组的大小和创建频率。如果它们不是很大且分配得不多,应该没问题。这可能是未来优化的一种方式——在出现问题之前,我不会担心它。 - Hogan
3
这真的取决于数组的大小以及你创建它们的频率。如果它们不是很大且分配得不多,应该没问题。这可能是未来优化的一种方式——在它成为问题之前,我不会担心它。 - Hogan
3
这真的取决于数组的大小以及你创建它们的频率。如果它们不是很大且分配得不多,应该没问题。这可能是未来优化的一种方式,但在它成为问题之前,我不会担心它。 - undefined
2
如果你在Save方法之外没有任何对数组的引用,它们将会自动清理,并且可能并不太重要。没有上下文很难确定,但我怀疑你是否经常创建足够大的数组以至于这成为一个问题。 - Broots Waymb
2
每隔一分钟或两分钟创建一个新的数组绝对不是问题。(假设你不会永远留着它们…) - Jon Skeet
显示剩余7条评论
1个回答

6
垃圾收集器(GC)会为您收集垃圾(包括未使用的内存和数组),因此如果您使用小数组,您不需要做任何事情。然而,如果您频繁(绝对不是每分钟一次)分配许多大数组,内存分配可能会耗费时间。如果您追求性能,您可以尝试对这些大数组进行池化处理,例如:
// Huge array allocation from pool
int[] array = ArrayPool<int>.Shared.Rent(1_000_000);

try { 
  // Do something with the array      
}
finally {
  // Return array to pool 
  ArrayPool<int>.Shared.Return(array);
}

1
谢谢,我对垃圾回收器有一定的了解,但不确定它在清理完我的代码后的程度。我觉得我的项目规模很小,应该不是什么问题。不过,为了以后参考,我会更深入地研究垃圾回收器的具体细节。 - Kenneth
1
谢谢,我对垃圾收集器有点了解,但不确定它在清理我的工作后的程度。我认为我的项目规模很小,应该不是一个问题。不过,为了将来参考,我会更深入地了解垃圾收集器的具体情况。 - Kenneth
1
谢谢,我对垃圾收集器有一些了解,但不确定它在我之后清理的程度。我认为我的项目规模很小,不应该成为一个问题。不过,为了将来的参考,我会更深入地了解垃圾收集器的具体细节。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接