La GC no se preocupa por nada que no sea la memoria, por lo que si Tengo mucha memoria y no la consumo en gran medida, podría pasar mucho tiempo hasta que aparezca un GC. Durante todo ese tiempo, los recursos no administrados, como las conexiones de red, los identificadores de archivo, las conexiones de bases de datos, los identificadores de gráficos, etc., permanecen atados por los objetos que están esperando ser GC. Esto puede hacer que se quede sin estos recursos y el GC no tendrá en cuenta porque no supervisa los recursos no administrados.
Así que si coloca el código en un bucle y sigue llamándolo, sin llamar a Dispose, puede encontrar que se degrada rápidamente en el rendimiento (procesos que luchan por recursos escasos) o le da una excepción debido a la falta de recursos no administrados . Depende del contexto de cómo se llama y cómo está creando otros objetos relacionados. En lugar de analizar cada situación, siempre es más seguro llamar a Dispose tan pronto como haya terminado con la instancia.
Es cierto que el GC desistirá con el tiempo de un objeto que se haya salido del alcance/ya no se haga referencia a él, pero esto es indeterminista. Al ser indeterminista, puede ver resultados diferentes en cuanto a la disponibilidad de los recursos al realizar pruebas frente a producción y generar excepciones aleatorias por no asignar recursos cuando se agoten. Si pudieras elegir entre el comportamiento determinista consistente de tu aplicación y la indeterminística, probablemente querrías algo determinista, a menos que tal vez estés tratando de confundir a tus probadores.
Creo que ustedes no entendieron el punto aquí: Como puede ver en la segunda opción, debería escribirlo así: request.GetResponse(); return true; Como puede ver, no me importa qué en la devolución GetResponse y lo ignoro por completo. En cuanto a la funcionalidad de uso, soy totalmente consciente de ello, no estaba seguro de si hay algún beneficio adicional de agregar el uso aquí en puede ni siquiera preocuparse por la respuesta. Espero haberlo aclarado. –
@Or A: Ya sea que le importe la respuesta o no, todavía está llamando a 'GetResponse', lo que significa que el objeto devuelto aún debe eliminarse. (Y el patrón recomendado para hacer eso normalmente sería un bloque 'using'.) – LukeH
@LukeH: En este extraño contexto, el uso de' .Dispose(); 'probablemente sea correcto. –