矩阵乘法函数

时间:2013-09-19 20:18:27

标签: c# .net memory memory-management matrix

我试图将矢量(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 [](此辅助)构建一个合适的类(矩阵类)并反复使用它。

2 个答案:

答案 0 :(得分:2)

这不是问题。该方法是静态的,但此处没有静态状态。如果您有一个静态的double[]变量,那么您需要关注。

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

因此,如果任何调用此方法的人长时间保持结果,它将会保持很长时间。如果来电者长时间没有按住它,它将不会长时间停留。

答案 1 :(得分:1)

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