我试图将矢量(1行,4列)与矩阵(4x4)相乘;向量代表一个点的一些坐标,并且在我的应用程序中,它意图有很多(点)。我写了一个函数来进行乘法运算:
public static double[] Multiply(double[] point, double[,] matrix)
{
double[] aux = new double[4];
for (int i = 0; i < 4; ++i)
{
aux[i] = 0;
for (int j = 0; j < 4; ++j)
{
aux[i] += point[j] * matrix[j, i];
}
}
return aux;
}
我认为这应该可以正常运作。
问题在于:函数是静态的,但每次我打算使用它时,都会生成一个新的double [4](aux [])。因为我需要几百/千次(一秒)我需要知道那些双精度(辅助)是否存储在内存中直到我关闭应用程序,因此,转向大内存分配。垃圾收集器是不是将它们移除(旧的)?
另一种方法是使用字段double [](此辅助)构建一个合适的类(矩阵类)并反复使用它。
答案 0 :(得分:2)
这不是问题。该方法是静态的,但此处没有静态状态。如果您有一个静态的double[]
变量,那么您需要关注。
实际上,该方法只是将数组返回给它的调用者。该调用者可以将该数组存储在实例字段中,集合内部,作为局部变量,或者谁知道什么。每当该数组不再被任何可执行的代码引用时,垃圾收集将清理它。
因此,如果任何调用此方法的人长时间保持结果,它将会保持很长时间。如果来电者长时间没有按住它,它将不会长时间停留。
答案 1 :(得分:1)
你不应该担心内存,GC会收集所有未使用的数组。您可以在MSDN中阅读有关垃圾收集的更多信息: