【问题标题】:Matrix multiplication function矩阵乘法函数
【发布时间】:2013-09-19 20:18:27
【问题描述】:

我正在尝试将向量(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[](此辅助)构建一个适当的类(矩阵类)并一遍又一遍地使用它。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2021-08-07
        • 1970-01-01
        • 2016-10-10
        • 1970-01-01
        • 2020-05-08
        • 2018-04-11
        • 2017-03-11
        • 2013-12-23
        相关资源
        最近更新 更多