Als Diagnose möchte ich die Anzahl der Zyklen pro Sekunde in meiner App anzeigen. (Denken Sie pro Sekunde in einem Ego-Shooter.)
Aber ich möchte nicht den neuesten Wert oder den Durchschnitt seit dem Start anzeigen. Was ich berechnen möchte, ist der Mittelwert der letzten X-Werte.
Meine Frage ist vermutlich die beste Möglichkeit, diese Werte zu speichern. Mein erster Gedanke war, ein Array fester Größe zu erstellen, so dass jeder neue Wert den ältesten ersetzen würde. Ist das der beste Weg? Wenn ja, wie würde ich es umsetzen?
BEARBEITEN: Hier ist die Klasse, die ich geschrieben habe: RRQueue . Es erbt die Warteschlange, erzwingt jedoch die Kapazität und entfernt bei Bedarf die Warteschlange.
EDIT 2: Pastebin ist so passé. Jetzt auf einem GitHub-Repo .
Vielleicht einen Filter verwenden:
Durchschnitt = 0,9 * Durchschnitt + 0,1 * Wert wo "Wert" die letzte Messung ist
Variiere mit 0,9 und 0,1 (solange die Summe dieser beiden 1 ist)
Dies ist nicht genau ein Durchschnitt, aber es filtert Spikes, Transienten usw. heraus, benötigt aber keine Arrays für die Speicherung.
Grüße, Karel
Sie sollten sich die in Windows integrierte Leistungsüberwachung ansehen: D.
Die API wird sich ein bisschen wackelig anfühlen, wenn Sie noch nicht damit gespielt haben, aber sie ist schnell, leistungsfähig, erweiterbar und macht es schnell möglich, brauchbare Ergebnisse zu erzielen.
Die einfachste Option hierfür ist wahrscheinlich die Verwendung einer %code% , die dies bietet das First-In-First-Out-Verhalten, nach dem Sie suchen. Just Enqueue () Ihre Elemente, und wenn Sie mehr als X Elemente haben, Entfernen Sie die zusätzlichen Elemente ().
meine Implementierung:
%Vor%Verwendung:
%Vor%Eine einfache aber schnelle Implementierung:
%Vor%Als Diagnose möchte ich die Anzahl der Zyklen pro Sekunde in meiner App anzeigen. (Denken Sie pro Sekunde in einem Ego-Shooter.)
Aber ich möchte nicht den neuesten Wert oder den Durchschnitt seit dem Start anzeigen. Was ich berechnen möchte, ist der Mittelwert der letzten X-Werte.
Meine Frage ist vermutlich die beste Möglichkeit, diese Werte zu speichern. Mein erster Gedanke war, ein Array fester Größe zu erstellen, so dass jeder neue Wert den ältesten ersetzen würde. Ist das der beste Weg? Wenn ja, wie würde ich es umsetzen?
BEARBEITEN: Hier ist die Klasse, die ich geschrieben habe: RRQueue . Es erbt die Warteschlange, erzwingt jedoch die Kapazität und entfernt bei Bedarf die Warteschlange.
EDIT 2: Pastebin ist so passé. Jetzt auf einem GitHub-Repo .
Die einfachste Option hierfür ist wahrscheinlich die Verwendung einer Queue<T>
, die dies bietet das First-In-First-Out-Verhalten, nach dem Sie suchen. Just Enqueue () Ihre Elemente, und wenn Sie mehr als X Elemente haben, Entfernen Sie die zusätzlichen Elemente ().
Als Diagnose möchte ich die Anzahl der Zyklen pro Sekunde in meiner App anzeigen. (Denken Sie pro Sekunde in einem Ego-Shooter.)
Aber ich möchte nicht den neuesten Wert oder den Durchschnitt seit dem Start anzeigen. Was ich berechnen möchte, ist der Mittelwert der letzten X-Werte.
Meine Frage ist vermutlich die beste Möglichkeit, diese Werte zu speichern. Mein erster Gedanke war, ein Array fester Größe zu erstellen, so dass jeder neue Wert den ältesten ersetzen würde. Ist das der beste Weg? Wenn ja, wie würde ich es umsetzen?
BEARBEITEN: Hier ist die Klasse, die ich geschrieben habe: RRQueue . Es erbt die Warteschlange, erzwingt jedoch die Kapazität und entfernt bei Bedarf die Warteschlange.
EDIT 2: Pastebin ist so passé. Jetzt auf einem GitHub-Repo .
Vielleicht einen Filter verwenden:
Durchschnitt = 0,9 * Durchschnitt + 0,1 * Wert wo "Wert" die letzte Messung ist
Variiere mit 0,9 und 0,1 (solange die Summe dieser beiden 1 ist)
Dies ist nicht genau ein Durchschnitt, aber es filtert Spikes, Transienten usw. heraus, benötigt aber keine Arrays für die Speicherung.
Grüße, Karel
Sie sollten sich die in Windows integrierte Leistungsüberwachung ansehen: D.
Die API wird sich ein bisschen wackelig anfühlen, wenn Sie noch nicht damit gespielt haben, aber sie ist schnell, leistungsfähig, erweiterbar und macht es schnell möglich, brauchbare Ergebnisse zu erzielen.
Die einfachste Option hierfür ist wahrscheinlich die Verwendung einer %code% , die dies bietet das First-In-First-Out-Verhalten, nach dem Sie suchen. Just Enqueue () Ihre Elemente, und wenn Sie mehr als X Elemente haben, Entfernen Sie die zusätzlichen Elemente ().
meine Implementierung:
%Vor%Verwendung:
%Vor%Eine einfache aber schnelle Implementierung:
%Vor%Vielleicht einen Filter verwenden:
Durchschnitt = 0,9 * Durchschnitt + 0,1 * Wert wo "Wert" die letzte Messung ist
Variiere mit 0,9 und 0,1 (solange die Summe dieser beiden 1 ist)
Dies ist nicht genau ein Durchschnitt, aber es filtert Spikes, Transienten usw. heraus, benötigt aber keine Arrays für die Speicherung.
Grüße, Karel
Sie sollten sich die in Windows integrierte Leistungsüberwachung ansehen: D.
Die API wird sich ein bisschen wackelig anfühlen, wenn Sie noch nicht damit gespielt haben, aber sie ist schnell, leistungsfähig, erweiterbar und macht es schnell möglich, brauchbare Ergebnisse zu erzielen.
Tags und Links arrays c# performance diagnostics