Optimize GC for frame calculation.

This commit is contained in:
2023-02-09 18:07:06 +08:00
parent 16b1d323dc
commit 041c1e374e
4 changed files with 21 additions and 24 deletions

View File

@@ -10,6 +10,7 @@ namespace Cryville.Crtr {
SquareMatrix matFrame;
ContainerState[] tracks;
public int TrackCount { get { return tracks.Length; } }
public GroupHandler(Chart.Group tg, ChartHandler ch) : base() {
this.ch = ch;
@@ -25,14 +26,17 @@ namespace Cryville.Crtr {
select c.Value
).ToArray();
matFrame = SquareMatrix.WithPolynomialCoefficients(tracks.Length);
frame = new ColumnVector<Vector3>(tracks.Length);
frame1 = new ColumnVector<Vector3>(tracks.Length);
frame2 = new ColumnVector<Vector3>(tracks.Length);
}
ColumnVector<Vector3> frame;
ColumnVector<Vector3> frame1;
ColumnVector<Vector3> frame2;
public ColumnVector<Vector3> GetCurrentFrame(Func<ContainerState, Vector3> func) {
for (int i = 0; i < tracks.Length; i++)
frame[i] = func(tracks[i]);
return matFrame.Eliminate(frame, Vector3Operator.Instance);
frame1[i] = func(tracks[i]);
matFrame.Eliminate(frame1, frame2, Vector3Operator.Instance);
return frame2;
}
}