Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Utilizzare il profiler di ObjectDB

A partire da Godot 4.6, è disponibile una nuova scheda ObjectDB Profiler nel pannello inferiore Debugger. Questo profiler consente di catturare snapshot dello stato attuale dell'ObjectDB, ovvero il database che contiene tutte le classi derivate da Object attualmente allocate in memoria. Ciò è utile per identificare perdite di memoria e comprendere l'utilizzo della memoria del progetto.

Inoltre, questo strumento è in grado di visualizzare le differenze tra due snapshot. Ciò può essere utile per identificare miglioramenti o peggioramenti nell'utilizzo della memoria dopo aver apportato modifiche al progetto. Ridurre l'utilizzo della memoria può portare a prestazioni migliori, anche nei casi in cui la memoria non rappresenta un collo di bottiglia. Riducendo l'utilizzo della memoria, è possibile effettuare meno allocazioni, che possono essere un'operazione costosa, soprattutto se effettuate in grandi quantità durante il gioco.

Vedi anche

Consulta Quando e come evitare di utilizzare i nodi per tutto per informazioni sull'utilizzo di alternative più leggere ai nodi, che possono aiutare a ridurre il consumo di memoria nel tuo progetto.

Avvertimento

Il profiler di ObjectDB non tiene traccia di ogni singolo bit di memoria utilizzato dal motore o dalle librerie esterne. Le classi native del motore che non sono esposte all'API di scripting non appariranno negli snapshot.

Considera usare strumenti esterni di profilazione della memoria se hai bisogno di accedere a queste informazioni.

Utilizzo

Apri la scheda Profiler di ObjectDB nel pannello inferiore Debugger. Ti troverai nella pagina di riepilogo, senza snapshot catturati ancora.

Riepilogo del profiler di ObjectDB senza snapshot catturati

Riepilogo del profiler di ObjectDB senza snapshot catturati

Avvia il progetto, poi raggiungi il punto in cui desideri creare uno snapshot (ad esempio, dopo aver caricato un livello). Clicca su Take ObjectDB Snapshot per creare uno snapshot al momento attuale. Se il pulsante appare disattivato, assicurati prima che il progetto sia in esecuzione.

Riepilogo del profiler di ObjectDB con uno snapshot catturato

Riepilogo del profiler di ObjectDB con uno snapshot catturato

È possibile catturare più snapshot durante una singola esecuzione del progetto. Inoltre, facendo clic destro su uno snapshot nell'elenco degli snapshot, è possibile rinominarlo, mostrarlo nel gestore dei file o eliminarlo.

Suggerimento

È buona norma rinominare gli snapshot dopo averli catturati, assegnando loro nomi descrittivi (ad esempio, before_optimization, after_optimization). A prescindere dal nome, la data in cui è stato catturato lo snapshot rimane memorizzata nel file dello snapshot stesso.

I file snapshot hanno l'estensione .odb_snapshot e si trovano in user://objectdb_snapshots/ (consultare i dettagli sui percorsi dei dati). Questi file si possono copiare tranquillamente tra diversi dispositivi, poiché sono indipendenti dalla piattaforma.

Visualizzare le differenze tra gli snapshot

Dopo aver catturato almeno due snapshot, il menu a tendina Diff Against diventa disponibile. Qui è possibile selezionare un altro snapshot da confrontare con quello attualmente selezionato.

Menu a tendina "Diff Against" nell'angolo in basso a sinistra del profiler di ObjectDB

Menu a tendina "Diff Against" nell'angolo in basso a sinistra del profiler di ObjectDB

La pagina di riepilogo mostrerà poi le differenze tra i due snapshot:

Due snapshot confrontate nella scheda Riepilogo

Due snapshot confrontate nella scheda Riepilogo

Questo vale anche per tutte le altre schede del profiler di ObjectDB, che mostreranno le differenze tra i due snapshot in colonne aggiuntive.

Classi

Nella scheda Classi, è possibile visualizzare quante istanze di ciascuna classe sono state create al momento della cattura dello snapshot:

Uno snapshot visualizzato nella scheda Classi

Uno snapshot visualizzato nella scheda Classi

In modalità di confronto, sarà mostrato il numero di istanze della classe per lo snapshot attualmente selezionato (colonna A) e per lo snapshot con cui viene effettuato il confronto (colonna B). Sarà inoltre mostrata la differenza nel numero di istanze nella colonna Delta.

Due snapshot confrontati nella scheda Classi. Qui, la colonna A rappresenta ``second_session``, la colonna B rappresenta ``first_session``

Due snapshot confrontati nella scheda Classi. Qui, la colonna A rappresenta second_session, la colonna B rappresenta first_session

Puoi cliccare su una classe nell'elenco a destra per visualizzarla nell'ispettore.

Un'istanza di classe selezionata visualizzata nell'ispettore

Un'istanza di classe selezionata visualizzata nell'ispettore

Suggerimento

L'anteprima delle istanze nell'ispettore è disponibile anche in altre schede (Nodi, Oggetti e RefCounted).

Oggetti

La scheda Oggetti è simile, ma si differenzia per il modo in cui presenta i dati. Qui, ogni istanza è elencata in modo lineare, anziché essere raggruppata per classe. Quando si seleziona un oggetto, sulla destra apparirà un elenco degli altri oggetti a cui fa riferimento (Outbound References), nonché un elenco degli oggetti da cui è referenziato (Inbound References).

This allows you to view objects either in a "top-down" manner (viewing what objects a given object references) or in a "bottom-up" manner (viewing what objects reference a given object).

La scheda Oggetti in uso per visualizzare gli oggetti in modo "dall'alto verso il basso"

La scheda Oggetti in uso per visualizzare gli oggetti in modo "dall'alto verso il basso"

In the above image, clicking the default_font object in the list will switch the view to the perspective of that object. This object is being referenced by a lot of other objects as well, which effectively switches to a "bottom-up" perspective.

La scheda Oggetti in uso per visualizzare gli oggetti in modo "dal basso verso l'alto"

La scheda Oggetti in uso per visualizzare gli oggetti in modo "dal basso verso l'alto"

Nodi

Successivamente, la scheda Nodi mostra l'albero di scene al momento della cattura dello snapshot.

La scheda Nodi usata per visualizzare l'albero di scene

La scheda Nodi usata per visualizzare l'albero di scene

This tab is particularly interesting in diff view, since it supports showing the difference between the two snapshots in a more visual manner. When Combined Diff is unchecked, you can see the differences side by side.

Separate diff view in the Nodes tab

Separate diff view in the Nodes tab

Quando Combined Diff è spuntato, è possibile vedere le differenze unite in un unico albero, con i nodi aggiunti evidenziati in verde e i nodi rimossi evidenziati in rosso.

Combined diff view in the Nodes tab

Combined diff view in the Nodes tab

Additionally, you can view a list of orphan nodes (nodes that are not attached to the scene tree root) at the end of the tree view. You can view it more easily by collapsing the root node, since these are listed outside the main scene tree.

Nodi orfani alla fine dell'albero dei nodi nel profiler di ObjectDB

Nodi orfani alla fine dell'albero dei nodi nel profiler di ObjectDB

RefCounted

L'ultima scheda è la scheda RefCounted. Questa scheda è simile alla scheda Oggetti, ma mostra direttamente nella tabella il conteggio dei riferimenti delle classi derivate da RefCounted. La tabella ha quattro colonne:

  • Rif. nativi: il numero di riferimenti nativi del motore all'oggetto.

  • Rif. ObjectDB: il numero di riferimenti di ObjectDB all'oggetto.

  • Rif. totali: la somma dei riferimenti nativi e dei riferimenti di ObjectDB.

  • Cicli ObjectDB: il numero di riferimenti circolari rilevati.

When in diff view, snapshot B is always listed above snapshot A if a RefCounted instance exists in both snapshots.

L'elenco a destra mostra i dettagli relativi all'istanza selezionata, tra cui un elenco di riferimenti e se questi sono duplicati.

La scheda RefCounted usata per visualizzare le istanze RefCounted

La scheda RefCounted usata per visualizzare le istanze RefCounted

Nota

La scheda RefCounted non elenca gli oggetti che derivano direttamente da Object, poiché questi non conteggiano i riferimenti.