come faccio a sapere in modo specifico quali classi devono essere smaltite?
In breve, GC in Windows, alcuni potrebbero argomentare .NetFx , gestirà la gestione delle risorse e la sua durata nel sistema. In breve, non devi preoccuparti di gestirlo in .Net come fai nella sfera non gestita (C, C ++, ecc.)
In generale, gli oggetti che implementano IDisposable hanno la propensione a consumare grandi quantità di risorse (CPU, RAM, HDD, ecc.). Pertanto, lo sviluppatore ha deciso di estendere l'interfaccia IDisposable per fornire manualmente la logica per sbarazzarsi di quei maiali delle risorse.
Come punto di chiarimento, l'istruzione using è più una parola chiave zucchero sintattica per try...finally . Ci sono più coraggio e gloria dietro la logica dell'istruzione using ma tutto si riduce a try..finally ; come una parola di full-disclosure, using statement non implementa catch , questo è tutto per te.
Esiste una regola empirica generale o ispezioni le definizioni di classe per vedere se gestiscono in qualche modo risorse non gestite?
Ancora una volta, qualsiasi "oggetto" creato eredita di default Object . Ecco come .Net diventa efficacemente un'utilità gestita. Anche se non definisci un'ereditarietà esplicita su Object , il compilatore lo rende ereditario Object .
Le uniche risorse di cui devi preoccuparti sono le librerie non verificate di terze parti (DLL). Se provi ad allegarlo a un progetto .Net, urlerà "maledetto omicidio" a te finché non lo sistemerai correttamente.