矩阵乘法函数
本文关键字:函数 | 更新日期: 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 中的垃圾回收的详细信息:
- 垃圾回收
- 垃圾回收器基础知识和性能提示
- 垃圾回收基础
- 垃圾回收和性能