0

我正在尝试将向量(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[])。因为我需要这几十万次(一秒),所以我需要知道这些双打(aux)是否存储在内存中,直到我关闭应用程序,因此,启动大内存分配。垃圾收集器不是在移除它们(旧的)吗?

另一种方法是使用字段 double[] (此辅助)构建一个适当的类(矩阵类)并一遍又一遍地使用它。

4

2 回答 2

2

这不是问题。该方法是静态的,但这里没有静态。如果您有一个double[]静态变量,那么您需要担心。

实际上,该方法将简单地将数组返回给它的调用者。该调用者可能将该数组存储在实例字段中、集合内、作为局部变量或谁知道。每当该数组不再被任何可以执行的代码引用时,垃圾收集器就会清理它。

因此,如果调用此方法的人长时间持有结果,它将保持很长时间。如果呼叫者不坚持很长时间,它就不会停留很长时间。

于 2013-09-19T20:21:51.657 回答
1

您不必担心内存,GC 会收集所有未使用的数组。您可以在 MSDN 中阅读有关垃圾收集的更多信息:

于 2013-09-19T20:21:54.193 回答