Di seguito spiego i passaggi principali per analizzare la propria applicazione per trovare eventuali leak (in particolare riferiti ad oggetti Halcon) con DotMemory.

  1. Aprire DotMemory (Reshaper - Profile - Run Application Memory Profiling)
  2. Selezionare Local - StandAlone (non utilizzare Attach To Process altrimenti la funzionalitΓ  di conoscere chi crea i vari oggetti (allocation data) Γ¨ disabilitata)
  3. Inserire il path dell’applicativo (per esempio C:\Users\Paolo\Repository\Imago\mhira3d\src\bin\x64\Debug\Mhira3D.exe)
  4. Spuntare β€œControl profiling manually” con l’impostazione β€œStart collecting allocation…” a true
  5. Premere Run. L’applicazione indicata verrΓ  lanciata
  6. 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).
  1. Premere Get Snapshot, fare cose, premere ancora Get Snapshot.
  2. Uscire dall’applicativo (Kill Process)
  3. Ora abbiamo due snapshot da confrontare, premere, in basso, il pulsante Compare
  4. Raggruppare gli oggetti per assembly (Group by Assembly) cercando halcondotnet
  5. Aprire l’expander e cercare HalconDotNet.HObject
  6. 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.
  7. Premere il tasto ”+” in alto che copia la finestra corrente in una nuova scheda.
  8. In una scheda cliccare su β€œNew Objects” e nella seconda su β€œDead objects”
  9. Ora dobbiamo trovare l’oggetto che Γ¨ presente in una lista e non nella seconda. una volta trovato doppio click.
  10. 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.
  11. Ora ho tutte le informazioni per risolvere il problema.