如何解决是否在堆栈上分配值类型的本地数组并立即收集垃圾?
public static Vector2[] To1DArray(this Vector2[,] grid)
{
Vector2[] array = new Vector2[grid.Length];
for (int i = 0; i < grid.GetLength(0); i++)
{
for (int j = 0; j < grid.GetLength(1); j++)
{
array[grid.GetLength(1) * i + j] = grid[i,j];
}
}
return array;
}
我说的是我在函数的第一行中创建的 Vector2 结构数组。
解决方法
您正在返回该数组。这意味着正在返回引用,因此数组肯定不会被垃圾收集。除非您使用“不安全模式”,否则 C# 永远不会释放您引用的内存等(与 C++ 不同,如果您使用错误)。
在我上面的评论中,我认为您的问题与故意只存在于一个函数中的数组的性能有关。 不过,您的函数可以安全使用。
,数组在堆上。
但总的来说,您不必为此担心太多。
如果你真的这样做了,你应该研究一下“阵列池”。特别是如果您的网格始终具有相同的大小。
顺便说一下,两个数组在内存中都是线性存储的。
您可以简单地使用 Buffer.BlockCopy
var array = new Vector2[grid.Length];
Buffer.BlockCopy(grid,array,grid.Length * 2 * sizeof(float));
return array;
在它们之间进行转换。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。