Простой циклический алгоритм (скользящее среднее значение) массив в C#

Как диагностика, я хочу отобразить количество циклов в секунду в моем приложении. (Думайте кадры в секунду в шутере от первого лица.)

Но я не хочу отображать новое значение или среднее число начиная с запуска. То, что я хочу вычислить, является средними из последних X значений.

Мой вопрос, я предполагаю о лучшем способе сохранить эти значения. Моя первая мысль состояла в том, чтобы создать массив фиксированного размера, таким образом, каждое новое значение выставит самое старое. Действительно ли это - лучший способ сделать это? Если так, как я реализовал бы его?

Править: Вот класс, который я записал: RRQueue. Это наследовало Очередь, но осуществляет способность и двухсторонние очереди при необходимости.

РЕДАКТИРОВАНИЕ 2: Pastebin так passé. Теперь на GitHub repo.

8
задан Tom Wright 5 March 2012 в 14:19
поделиться

4 ответа

Самым простым вариантом для этого, вероятно, является использование Queue , так как это обеспечивает первый вход , первое, что вам нужно. Просто Поставьте в очередь () ваши элементы, а когда у вас более X элементов, Dequeue () лишний элемент (ы).

16
ответ дан 5 December 2019 в 05:18
поделиться

Простая, но быстрая реализация:

// untested

int[] values = new int [10];  // all 0's initially
int sum = 0;
int pos = 0;

void AddValue (int v)
{
   sum -= values[pos];  // only need the array to subtract old value
   sum += v;
   values[pos] = v;     
   pos = (pos + 1) % values.length;    
}

int Average()
{
   return sum / values.length;
}
13
ответ дан 5 December 2019 в 05:18
поделиться

Вам следует взглянуть на мониторинг производительности, встроенный в Windows: D.

MSDN

API будет казаться немного шатким, если вы раньше не играли с ним, но он быстрый, мощный, расширяемый и быстро помогает получить полезные результаты.

0
ответ дан 5 December 2019 в 05:18
поделиться

Если вам нужна самая быстрая реализация, то да, массив фиксированного размера () с отдельным счетчиком будет самым быстрым.

1
ответ дан 5 December 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: