___ qstntxt ___

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 .

    
___ answer16060427 ___

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

    
___ answer3097410 ___

Sie sollten sich die in Windows integrierte Leistungsüberwachung ansehen: D.

MSDN

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.

    
___ answer3096935 ___

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 ().

    
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die zum Erstellen einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ answer44326553 ___

meine Implementierung:

%Vor%

Verwendung:

%Vor%     
___ tag123performance ___ Für Fragen zur Messung oder Verbesserung der Code- und Anwendungseffizienz. ___ tag123arrays ___ Ein Array ist eine geordnete Datenstruktur, die aus einer Sammlung von Elementen (Werten oder Variablen) besteht, die jeweils durch einen oder mehrere Indizes identifiziert werden. Wenn Sie nach bestimmten Varianten von Arrays fragen, verwenden Sie stattdessen diese verwandten Tags: [Vektor], [Arraylist], [Matrix]. Wenn Sie dieses Tag verwenden, markieren Sie die Frage auch mit der verwendeten Programmiersprache, es sei denn, Ihre Frage bezieht sich nicht auf eine bestimmte Programmiersprache. ___ tag123diagnostics ___ hilf uns dieses Wiki zu bearbeiten ___ answer3097014 ___

Eine einfache aber schnelle Implementierung:

%Vor%     
___

8

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 .

    
Tom Wright 22.06.2010, 20:34
quelle

6 Antworten

16

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 ().

    
Reed Copsey 22.06.2010, 20:36
quelle
13

Eine einfache aber schnelle Implementierung:

%Vor%     
Henk Holterman 22.06.2010 20:45
quelle
1
___ qstntxt ___

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 .

    
___ answer16060427 ___

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

    
___ answer3097410 ___

Sie sollten sich die in Windows integrierte Leistungsüberwachung ansehen: D.

MSDN

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.

    
___ answer3096935 ___

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 ().

    
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die zum Erstellen einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ answer44326553 ___

meine Implementierung:

%Vor%

Verwendung:

%Vor%     
___ tag123performance ___ Für Fragen zur Messung oder Verbesserung der Code- und Anwendungseffizienz. ___ tag123arrays ___ Ein Array ist eine geordnete Datenstruktur, die aus einer Sammlung von Elementen (Werten oder Variablen) besteht, die jeweils durch einen oder mehrere Indizes identifiziert werden. Wenn Sie nach bestimmten Varianten von Arrays fragen, verwenden Sie stattdessen diese verwandten Tags: [Vektor], [Arraylist], [Matrix]. Wenn Sie dieses Tag verwenden, markieren Sie die Frage auch mit der verwendeten Programmiersprache, es sei denn, Ihre Frage bezieht sich nicht auf eine bestimmte Programmiersprache. ___ tag123diagnostics ___ hilf uns dieses Wiki zu bearbeiten ___ answer3097014 ___

Eine einfache aber schnelle Implementierung:

%Vor%     
___
Stephen Cleary 22.06.2010 20:39
quelle
1

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

    
Karel 17.04.2013 12:45
quelle
0

Sie sollten sich die in Windows integrierte Leistungsüberwachung ansehen: D.

MSDN

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.

    
Aaron 22.06.2010 21:48
quelle
0

meine Implementierung:

%Vor%

Verwendung:

%Vor%     
suszig 02.06.2017 10:20
quelle

Tags und Links