Ich habe mich gefragt, welche Ansätze oder Gedanken die Leute zur Automatisierung von Leistungstests in XNA hatten. Momentan möchte ich nur in 2d arbeiten, aber das wirft viele Bereiche auf, in denen die Leistung mit verschiedenen Implementierungen verbessert werden kann.
Ein Beispiel wäre, wenn Sie zwei verschiedene Implementierungen der räumlichen Partitionierung hätten, eine wäre möglicherweise schneller als die andere, aber ohne einige tatsächliche Leistungstests könnten Sie nicht sicher sagen, welche (es sei denn, Sie haben gesehen, dass der Code in bestimmten Fällen offensichtlich langsam ist Teile). Sie könnten einen Komponententest schreiben, der für einen bestimmten Zeitraum immer wieder Entitäten für beide Implementierungen hinzufügt / aktualisiert / entfernt und sieht, wie viele in jedem Zeitrahmen erstellt wurden und der höhere der schnellere ist (in diesem Beispiel).
Ein weiteres Beispiel auf höherer Ebene wäre, wenn Sie sehen möchten, wie viele Entitäten Sie ungefähr auf dem Bildschirm haben können, ohne unter 60 fps zu fallen. Das Problem dabei ist , es automatisieren zu können, muss die versteckte Form Trick oder eine andere Sache verwenden , um ein Kick - off Mock Spiel und rein Test , welche Teilen Sie und deaktivieren Sie alles anderes kümmern.
Ich weiß, dass dies keine einfache Angelegenheit ist, denn selbst wenn Sie die Tests automatisieren können, liegt es an einem Menschen, zu interpretieren, ob die Ergebnisse leistungsfähig genug sind, aber als Teil eines Build-Schritts könnten Sie diese Tests ausführen und veröffentlichen lassen die Ergebnisse irgendwo zum Vergleich.
Auf diese Weise stellen Sie möglicherweise fest, dass der Leistungsfaktor im Allgemeinen gestiegen ist, wenn Sie von Version 1.1 auf 1.2 wechseln, aber einige zugrunde liegende Algorithmen geändert haben, was bedeutet, dass Sie die Gesamtleistung der Anwendung verbessert haben, und dann von 1.2 auf 1.3 dass Sie dann die Gesamtleistung etwas gesenkt haben.
Hat jemand so etwas in seinen Projekten automatisiert, und wenn ja, wie messen Sie Ihre Leistungsvergleiche auf hohem Niveau und welche Frameworks verwenden Sie zum Testen? Vorausgesetzt, Sie haben Ihren Code so geschrieben, dass er für die meisten Teile testbar / verspottbar ist, können Sie Ihre Tests einfach als Mechanismus verwenden, um einige Leistungsergebnisse zu erhalten ...
=== Bearbeiten ===
Aus Gründen der Klarheit bin ich mehr daran interessiert, wie Sie automatisierte Tests in XNA am besten nutzen können, um Ihre Leistung zu verfolgen, und nicht, um Tests oder Vermutungen durchzuführen, indem Sie Ihr Spiel manuell auf einem Computer ausführen. Dies unterscheidet sich grundlegend davon, ob Ihr Spiel auf X-Hardware spielbar ist. Es geht vielmehr darum, die Leistungsänderung zu verfolgen, wenn sich Ihre Spiel-Engine / Ihr Framework ändert.
Wie in einem der Kommentare erwähnt, können Sie leicht testen, "wie viele Knoten ich innerhalb von 2 Sekunden in QuadTreeA einfügen / entfernen / aktualisieren kann", aber Sie müssen diese Ergebnisse jedes Mal physisch überprüfen, um festzustellen, ob sie sich geändert haben gut und ist immer noch besser, als sich nur darauf zu verlassen, es zu spielen, um zu sehen, ob Sie einen Unterschied zwischen den Versionen bemerken. Wenn Sie jedoch einen Assert eingeben, um Sie über einen Fehler zu informieren, wenn dieser niedriger als beispielsweise 5000 in 2 Sekunden ist, haben Sie einen spröden Test, da dieser dann kontextabhängig zur Hardware und nicht nur zur Implementierung ist. Obwohl diese Art von automatisierten Tests nur dann wirklich von Nutzen ist, wenn Sie Ihre Tests als eine Art Build-Pipeline ausführen, dh:
Kasse -> Unit-Tests ausführen -> Integrationstests ausführen -> Leistungstests ausführen -> Paket
Auf diese Weise können Sie die Statistiken von einem Build zum anderen auf dem CI-Server leicht als Bericht vergleichen. Auch dies bedeutet für niemanden viel, wenn Sie nicht an Continuous Integration gewöhnt sind. Der Hauptschwerpunkt dieser Frage ist, wie die Leute dies zwischen den Builds verwalten und wie sie es am besten finden, darüber zu berichten. Wie gesagt, es kann subjektiv sein, aber da aus den Antworten Wissen gewonnen wird, scheint es eine lohnende Frage zu sein.