Eliminate Array.Copy GC in SquareMatrix.

This commit is contained in:
2023-02-11 23:09:46 +08:00
parent 42cb54de1d
commit 6df10837fe

View File

@@ -1,4 +1,4 @@
using System;
using UnsafeIL;
namespace Cryville.Common.Math {
/// <summary>
@@ -44,7 +44,7 @@ namespace Cryville.Common.Math {
/// <param name="o">The column operator.</param>
public void Eliminate<T>(ColumnVector<T> v, ColumnVector<T> result, IVectorOperator<T> o) {
int s = Size;
Array.Copy(content, buffer, Size * Size);
FillBuffer();
for (int i = 0; i < s; i++) refl[i] = i;
for (int r = 0; r < s; r++) {
for (int r0 = r; r0 < s; r0++)
@@ -73,6 +73,11 @@ namespace Cryville.Common.Math {
result[refl[r2]] = v2;
}
}
unsafe void FillBuffer() {
fixed (void* ptrc = content, ptrb = buffer) {
Unsafe.CopyBlock(ptrb, ptrc, (uint)(Size * Size * sizeof(float)));
}
}
/// <summary>
/// Creates a square matrix and fills it with polynomial coefficients.
/// </summary>