Das MicroProfiler ist ein Optimierungswerkzeug, das in Roblox Studio und dem Roblox-Client verfügbar ist, das detaillierte Zeitungsinformationen für Task Scheduler-Aufgaben anzeigt, die als Tags bekannt sind.
- Für eine Liste von häufigen Aufgaben, beachten Sie die Tag-Referenz.
- Für ein Schritt-für-Schritt-Beispiel zur Identifizierung eines Leistungsproblems mit dem MicroProfiler sehen Sie den MicroProfiler-Walkthrough.
MicroProfiler-Einführung
Um den MicroProfiler zu öffnen, drücken Sie CtrlAltF6 ( ⌘1> ⌥1> 3> F6 3> ) in Studio oder im Client. Sie können auch das Einstellungsmenü im Client verwenden.
Wenn er geöffnet ist, wird eine Menüleiste oben in der Ansichtsfensterdargestellt. Im Standardmodus zeigt ein bewegender Balken-Grafik die Zeit, die für jeden Frame des Task Scheduler verwendet wird.
Bars sollten in der Mitte des Diagramms generalisiert sein, aber Sie können plötzliche Spitzen sehen (schnelle Erhöhungen des Wertes). Spikes zeigen an, dass mehr Zeit zum Ausführen einiger Aufgaben erforderlich ist, normalerweise aufgrund einer erhöhten Workload. Zum Instanzerfordert die Erstellung einer Menge beweglicher Teile mehr Arbeit aus der Physiksimulation, was dann mehr Zeit zum Verarbeiten von Motion und Teilkontakten erfordert. Das folgende Bild zeigt ein Beispiel für einen Spike
Um die Aufnahme von Frames zu pausieren, drücken Sie CtrlP ( ⌘P ) oder klicken Sie auf 2> Pause2> in der Menüleiste. Während der Pause erscheint eine Zeitleiste, und Sie können durch Klicken oder Ziehen auf der Grafik durch die Frames navigieren.
Für eine vollständige Zusammenfassung der verschiedenen Ansichten und Möglichkeiten, die MicroProfiler-Oberfläche zu navigieren, siehe MicroProfiler-Modi.
Threads
Wie viele Programme verwendet Roblox mehrere Threads, um mehrere Sequenzen von Aufgaben gleichzeitig auszuführen. Im MicroProfiler detaillierten Modus können Sie auf der linken Seite Etiketten für jeden Thread sehen.
Es gibt drei Haupt-Thread-Typen:
Haupt/Render : Vielleicht unintuitiv, läuft auf der CPU. Verarbeitet Eingaben, Humanoids , Animationen/Tweening, Physikbesitz, Sound und Warteschrift-Wiederaufnahme. Aktualisiert auch Studio-Schnittstellen und koordiniert die anderen Threads.
Arbeiter ("RBX-Arbeiter": Helfen Sie dem HauptThread mit Netzwerken, Physik und Pfadfindung. Aufgrund der Anzahl der Kerne in modernen CPUs haben Sie wahrscheinlich viele Arbeiter Threads.
Render ("GPU") folgt einer "vorbereiten, ausführen, präsentieren"-Logik. Kommuniziert mit der Grafikverarbeitungseinheit (GPU) des Geräts.
- Vorbereiten: Informationen aus dem Haupt Thread werden verwendet, um Rendering-Modelle zu aktualisieren.
- Führen Sie: Führen Sie Rendering-Befehle aus, einschließlich 2D-Schnittstellen.
- Aktuell: Synchronisiert mit derGPU.
Benutzerdefiniertes Profiling
Wenn Ihre Skripte komplizierte Aufgaben ausführen, können Sie kritische Teile des Codes profilieren, um sicherzustellen, dass sie nicht zu lange dauern. Wrap Code in debug.profilebegin() und debug.profileend() , um alles zu zeit zu haben, was zwischen diesen Funktionsaufrufen und erstellen Sie ein Label auf der MicroProfiler-Zeit.
HardWorkScript
debug.profilebegin("Hard Work")-- Hier ist, wo der Code zum Profilieren hin sein solltedebug.profileend()
Es gibt eine begrenzte Menge an Speicher, die verfügbar ist für MicroProfiler-Etiketten. Wenn dieser Speicher nicht mehr verfügbar ist, können benutzerdefinierte profiler-Etiketten keinen sinnvollen Namen in der Zeitachse anzeigen. Verwenden Sie weniger Label, um dieses Problem zu vermeiden. Wenn Sie keine mehr benötigen, um einen Abschnitt Ihres Codes zu profilieren, kommentieren Sie oder entfernen Sie Anrufe zu diesen Funktionen.
Beispiel
Das Codebeispiel unten verbindet eine Dummy-Funktion mit dem RunService.PreSimulation -Ereignis, das jeden Frame ausführt. Alles, was dies oft macht, sollte so effizient wie möglich ausgeführt werden, so dass diese Funktion ein guter Kandidat für das Profiling ist.
local RunService = game:GetService("RunService")
local function onPreSimulation()
debug.profilebegin("Hard Work")
-- Beispiel für harte Arbeit: Tausche zwei Variablen 200.000 Mal
local a, b = 0, 1
for _ = 1, 200000 do
a, b = b, a
end
debug.profileend()
end
RunService.PreSimulation:Connect(onPreSimulation)
Wenn du die Erfahrung ausführst und die MicroProfiler ( CtrlP oder ⌘P ) unter der 2> gameStepped-Etikett2> siehst, wird die benutzerdefinierte Etikett unter dem 5> Beschriftungangezeigt.
Aus seiner Dauer auf der Zeitachse können Sie erkennen, dass die Funktion viel Zeit zum Verarbeiten benutzt, im Vergleich zu anderen Operationen.
Rahmen-Daten speichern
Wenn Sie ein Set von Rahmendaten für eine spätere Überprüfung (oder mit jemandem teilen möchten) speichern möchten, verwenden Sie das Dump-Menü . Die Engine speichert die Rahmendaten in einem Datei namens microprofile-<date>-<time>.html in der Roblox-Logs-Ordner.
- On Windows, check %LOCALAPPDATA%\Roblox\logs .
- On macOS, check ~/Library/Logs/Roblox .
Diese HTML-Dateien verwenden die gleichen web-based UI wie die live connection for mobile devices und server dumps.
Profiling auf Mobilgeräten
Um auf den MicroProfiler vom mobilen Client zuzugreifen, muss dein mobiles Gerät mit dem selben Netzwerk wie deine Entwicklungs-Maschine verbunden sein.
Aktivieren Sie den MicroProfiler im Einstellungen Menü des mobilen Geräts. Nachdem Sie es aktiviert haben, zeigt das Menü eine IP-Adresse und eine Port-Nummer an.
Zum Beispiel, in dem Screenshot oben, ist die Adresse 192.168.1.166 und der Hafen 1338 . Von einem Computer auf demselben Netzwerk navigieren Sie zu http://192.168.1.166:1338 für eine 1> web-basierte Version1>
Profiling des Servers
Zusätzlich zum Standard-Client MicroProfiler können Sie kurze Dump-Aktivitäten des Servers mit dem Server MicroProfiler ausführen.
In einem Erlebnis, für das du Berechtigungen zum Bearbeiten hast, öffne die Entwicklerkonsole mit StrgAlt2> F92>.
In dem Dropdown-Menü wählen Sie MicroProfiler .
In der ServerProfiler-Sektion geben Sie die Anzahl der Bilder pro Sekunde (maximal 60) und die Anzahl der Sekunden zum Profilieren (maximal 4) an.
Klicken Sie auf Starten Sie Aufnahme .
Nach einigen Sekunden bietet die Entwickler-Konsole den Pfad zum Datei, der der gleiche Pfad ist wie ein Standard-Dump.
Verwendung der Web-UI
Im Allgemeinen funktioniert die MicroProfiler-Web-UI ähnlich wie detaillierter Modus, aber es hat einige zusätzliche Funktionen:
Zusätzlich zur Gruppekannst du auch nach Thread filtern.
Verwenden Sie CtrlF / ⌘F zu springen, um auf den Zeitpunkt eines Aufgangs zu springen, der am längsten in der (Abbild) sicherndauert. Zum Beispiel, 2> computeLightingPerform2> läuft in jedem Frame. Wenn Sie es in einem Dump mit 128 Frames suchen, können
Verwenden Sie das Röntgen-Menü , um die Farbkodierung für die Speicherzuweisung zu aktivieren oder zu deaktivieren.
- H hellere Frames innerhalb der Hauptbar-Grafik zeigen eine höhere Speicherzuweisung.
- Hellere Teile der Vorschauleiste und hellere Etiketten auf der Zeitachse zeigen auf Teile des Frames mit höherer Speicherzuweisung.
- Im Röntgen-Modus drücken Sie C, um die Gesamtwozendgröße der Speicherzuweisungen anzuzeigen, nicht die Anzahl der Zuweisungen.
Verwenden Sie das Export-Menü , um eine CPU- oder Speicherflammen график zu exportieren, eine spezialisierte Visualisierung, die alle Call-Stacks einschließt, die in der (Abbild) sichernenthalten sind. Die Flammenграфиk ist besonders nützlich, um Aufgaben zu identifizieren, die nicht besonders lange dauern (und daher schwer zu bemerken), aber häufig genug laufen, um ihre Verarbeitungszeit zu bemerkbar zu machen.
Ziehen Sie einen zweiten Dump-Datei in die Web-UI, um einen Diff-Flammen-Grafik zu generieren, der Ihnen helfen kann, Verbesserungen oder Rückgänge an der Leistung Ihres Erlebnisses im Laufe der Zeit zu identifizieren. Klicken Sie auf Kombinieren und Vergleichen , um einen neuen HTML-Datei zu exportieren.
Der Diff-Flammen-Grafik unterstreicht die Dump ( links oder rechts), die mehr CPU oder Speicher verbraucht, mit helleren Farben, die einen größeren Unterschied anzeigen.