Как диагностика, я хочу отобразить количество циклов в секунду в моем приложении. (Думайте кадры в секунду в шутере от первого лица.)
Но я не хочу отображать новое значение или среднее число начиная с запуска. То, что я хочу вычислить, является средними из последних X значений.
Мой вопрос, я предполагаю о лучшем способе сохранить эти значения. Моя первая мысль состояла в том, чтобы создать массив фиксированного размера, таким образом, каждое новое значение выставит самое старое. Действительно ли это - лучший способ сделать это? Если так, как я реализовал бы его?
Править: Вот класс, который я записал: RRQueue. Это наследовало Очередь, но осуществляет способность и двухсторонние очереди при необходимости.
РЕДАКТИРОВАНИЕ 2: Pastebin так passé. Теперь на GitHub repo.
Самым простым вариантом для этого, вероятно, является использование Queue
, так как это обеспечивает первый вход , первое, что вам нужно. Просто Поставьте в очередь () ваши элементы, а когда у вас более X элементов, Dequeue () лишний элемент (ы).
Простая, но быстрая реализация:
// 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;
}
Вам следует взглянуть на мониторинг производительности, встроенный в Windows: D.
API будет казаться немного шатким, если вы раньше не играли с ним, но он быстрый, мощный, расширяемый и быстро помогает получить полезные результаты.
Если вам нужна самая быстрая реализация, то да, массив фиксированного размера () с отдельным счетчиком будет самым быстрым.