var ema1 = new ExponentialMovingAverage(3);
var outputs1 = ema1.Compute(inputs);
var ema2 = new ExponentialMovingAverage(3);
var outputs2 = ema2.Compute(ema1);
Я рассматривал использование inputs.ElementAt(index), а также использование foreach vs for и List vs Enumerable.
Как я могу улучшить код, в том числе его производительность?
} [/code] И у меня есть следующие тесты, которые проходят: [code][Fact] public void Test_AllNonNullInputs() { var ema = new ExponentialMovingAverage(3);
var inputs = new List { (new DateTimeOffset(2024, 1, 1, 0, 0, 0, TimeSpan.Zero), 10), (new DateTimeOffset(2024, 1, 2, 0, 0, 0, TimeSpan.Zero), 15), (new DateTimeOffset(2024, 1, 3, 0, 0, 0, TimeSpan.Zero), 20), (new DateTimeOffset(2024, 1, 4, 0, 0, 0, TimeSpan.Zero), 25), (new DateTimeOffset(2024, 1, 5, 0, 0, 0, TimeSpan.Zero), 30), (new DateTimeOffset(2024, 1, 6, 0, 0, 0, TimeSpan.Zero), 35) }; var output = ema.Compute(inputs).ToList();
[Fact] public void Test_FirstTwoInputsAreNull() { var ema = new ExponentialMovingAverage(3);
var inputs = new List { (new DateTimeOffset(2024, 1, 1, 0, 0, 0, TimeSpan.Zero), null), (new DateTimeOffset(2024, 1, 2, 0, 0, 0, TimeSpan.Zero), null), (new DateTimeOffset(2024, 1, 3, 0, 0, 0, TimeSpan.Zero), 20), (new DateTimeOffset(2024, 1, 4, 0, 0, 0, TimeSpan.Zero), 25), (new DateTimeOffset(2024, 1, 5, 0, 0, 0, TimeSpan.Zero), 30), (new DateTimeOffset(2024, 1, 6, 0, 0, 0, TimeSpan.Zero), 35) }; var output = ema.Compute(inputs).ToList();
Assert.Equal(6, output.Count); Assert.Null(output[0].ExponentialMovingAverage); Assert.Null(output[1].ExponentialMovingAverage); Assert.Null(output[2].ExponentialMovingAverage); Assert.Null(output[3].ExponentialMovingAverage); Assert.Equal(25m, output[4].ExponentialMovingAverage); Assert.Equal(30m, output[5].ExponentialMovingAverage); } [/code] Вычисление кажется медленным, например, при расчете EMA для EMA со многими входными данными: [code]var ema1 = new ExponentialMovingAverage(3); var outputs1 = ema1.Compute(inputs); var ema2 = new ExponentialMovingAverage(3); var outputs2 = ema2.Compute(ema1); [/code] Я рассматривал использование inputs.ElementAt(index), а также использование foreach vs for и List vs Enumerable. Как я могу улучшить код, в том числе его производительность?