Di seguito spiego i passaggi principali per analizzare la propria applicazione per trovare eventuali leak (in particolare riferiti ad oggetti Halcon) con DotMemory.
- Aprire DotMemory (Reshaper - Profile - Run Application Memory Profiling)
- Selezionare Local - StandAlone (non utilizzare Attach To Process altrimenti la funzionalitΓ di conoscere chi crea i vari oggetti (allocation data) Γ¨ disabilitata)
- Inserire il path dellβapplicativo (per esempio
C:\Users\Paolo\Repository\Imago\mhira3d\src\bin\x64\Debug\Mhira3D.exe
) - Spuntare βControl profiling manuallyβ con lβimpostazione βStart collecting allocationβ¦β a true
- Premere Run. Lβapplicazione indicata verrΓ lanciata
- Lβinterfaccia DotMemory ha due comandi principali:
- Collect Allocations: salva tutti gli stack trace di creazione di tutti gli oggetti.
- Get Snapshot: crea uno snapshot di tutti gli oggetti attualmente caricati in memoria (anche unmanaged).
- Premere Get Snapshot, fare cose, premere ancora Get Snapshot.
- Uscire dallβapplicativo (Kill Process)
- Ora abbiamo due snapshot da confrontare, premere, in basso, il pulsante Compare
- Raggruppare gli oggetti per assembly (Group by Assembly) cercando
halcondotnet
- Aprire lβexpander e cercare
HalconDotNet.HObject
- Abbiamo due colonne di riferimento: New objects e Dead objects. Se i due valori corrispondono non ho leak e possono concludere lβanalisi. Qualora invece i due valori differiscano (tipicamente New objects > Dead objects) ho un leak.
- Premere il tasto β+β in alto che copia la finestra corrente in una nuova scheda.
- In una scheda cliccare su βNew Objectsβ e nella seconda su βDead objectsβ
- Ora dobbiamo trovare lβoggetto che Γ¨ presente in una lista e non nella seconda. una volta trovato doppio click.
- Tramite il menu βKey Retention Pathsβ posso capire di che oggetto si tratta, mentre tramite il menu βCreation Stack Traceβ posso capire chi lo crea e quando.
- Ora ho tutte le informazioni per risolvere il problema.