Non so bene cosa intendi per timeout cmq in linea di principio lo sviluppatore dovrebbe disinteressarsi (a parte per ragioni di studio) del garbage collector.
Naturalmente discorso diverso vale per le risorse occupate. Infatti un dataset e' un oggetto che non occupa risorse e quindi viene distrutto automaticamente dal gc come detto sopra. Se invece parliamo di occupazione di risorse come ad es. un oggetto connection, e' il programmatore a doversi preoccupare manualmente della sua chiusura.