矩阵乘法函数

本文关键字:函数 | 更新日期: 2023-09-27 18:32:07

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

矩阵乘法函数

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

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

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

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

  • 垃圾回收
  • 垃圾回收器基础知识和性能提示
  • 垃圾回收基础
  • 垃圾回收和性能