Che cos’è una perdita di maniglia?

Una perdita di handle è un tipo di perdita di risorse, una situazione in cui una risorsa di elaborazione finita come la memoria viene consumata in modo eccessivo da un’applicazione. Le perdite di handle si verificano quando un’applicazione apre un “handle”, un tipo speciale di riferimento a una risorsa di sistema e non riesce a chiudere tale handle quando non è più necessario. Hanno il potenziale per ridurre le prestazioni, causare arresti anomali dell’applicazione o del sistema e possono essere un sintomo di bug importanti o codifica sciatta in un programma software. Molti strumenti per la risoluzione dei problemi sono a disposizione dei programmatori per aiutarli a combattere le perdite.

Nella programmazione del computer, un handle è una struttura che fa riferimento a una risorsa di sistema, come un blocco di memoria o un file su un disco. Gli handle forniscono uno strato di astrazione tra le risorse di sistema e le applicazioni e sono generalmente gestiti dal sistema operativo di un computer attraverso una “tabella degli handle” che associa ogni handle a una risorsa. Un programmatore potrebbe utilizzare un handle per fare riferimento a una finestra che viene poi disegnata sullo schermo dal sistema operativo.

Un’applicazione ben educata rilascerà handle che non richiede più, liberando risorse e garantendo che il sistema operativo non finisca per gestire una risorsa che non è in uso. Errori di programmazione, bug del software e incompatibilità tra software possono far sì che i programmi mantengano le maniglie di cui non hanno più bisogno. Mentre l’applicazione continua a essere eseguita, potrebbe accumulare un numero elevato di handle non necessari. Questo è noto come perdita della maniglia.

Gestire le perdite, come altri tipi di perdite di risorse, può portare a prestazioni lente, instabilità del sistema o, in casi estremi, un arresto anomalo del computer. Questo perché gli handle consumano risorse limitate come la memoria di sistema e se un’applicazione genera un numero eccessivo di handle senza chiuderli, queste risorse si esauriscono. La soglia esatta alla quale una perdita di handle inizia a causare problemi dipende dal sistema operativo del computer, dalla quantità di memoria disponibile e da altri fattori. Una perdita in cui vengono lasciate aperte alcune dozzine di maniglie probabilmente non verrà notata dagli utenti, mentre una perdita di diecimila o più è un segno di un grave bug nel codice dell’applicazione.

I programmatori devono prestare particolare attenzione alla gestione delle perdite, dato il loro potenziale di causare problemi. Il metodo più semplice per diagnosticare una perdita di handle consiste nell’osservare il conteggio degli handle, ovvero il numero di handle attualmente aperti da un processo o da un’applicazione durante l’esecuzione dell’applicazione. Il Task Manager di Windows® può visualizzare queste informazioni e anche le utilità di terze parti per Windows® e altri sistemi operativi possono essere utili per identificare e rintracciare handle che perdono.