c# - generate - Comprensión de las corrientes y su duración(descarga, eliminación, cierre)
params comments c# (1)
Nota: Ya leí las dos preguntas siguientes:
¿Puedes explicar el concepto de streams?
Estoy codificando en C #
- En casi todos los ejemplos de código que usan flujos, casi siempre se llaman .Dispose (), .Flush (), .Close ().
- En el concepto de una secuencia, ¿qué logra?
- Si no dispongo de un flujo que guardé en una variable, ¿se está filtrando mi aplicación en alguna parte?
- ¿Por qué tengo que llamar a alguna de estas funciones? He visto muestras de código que no hacen esto y todavía hacen el trabajo (sin aparente rotura)
Actualmente estoy creando una clase en mi aplicación que contiene un método principal (vamos a llamarlo GetStream()
) que devuelve una secuencia a través de myWebRequest.GetResponse().GetResponseStream()
El método principal GetStream()
devuelve un objeto Stream
que se puede usar para cualquier operación que requiera una transmisión (StreamReader, Bitmap (), etc.).
¿Hay alguna manera de hacer que la transmisión se elimine automáticamente después de su último uso (recolección de basura?) Sin forzar a nadie que llame a .GetStream()
a deshacerse de ella manualmente?
Como probablemente pueda decir, mis preguntas son vagas y generales. Mi comprensión de las transmisiones no es sólida, por lo que cualquier enlace a artículos útiles que ofrezcan una mirada más profunda a las transmisiones que una pregunta de SO puede ofrecer sería apreciado.
La eliminación de una secuencia lo cierra (y probablemente no haga mucho más). Al cerrar una secuencia, se vacía y libera todos los recursos relacionados con la secuencia, como un identificador de archivo. La descarga de una secuencia toma cualquier información almacenada que aún no se haya escrito, y la escribe de inmediato; algunas secuencias usan el almacenamiento en búfer internamente para evitar hacer una tonelada de pequeñas actualizaciones a recursos relativamente costosos como un archivo de disco o un conducto de red.
Debe llamar a Close
o Dispose
en la mayoría de las transmisiones, o su código es incorrecto, porque el recurso subyacente no se liberará para que otra persona lo use hasta que llegue el recolector de basura (quién sabe cuánto tiempo llevará). Dispose
es preferido como una cuestión de curso; se espera que elimines todas las cosas desechables en C #. Probablemente no tenga que llamar a Flush
explícitamente en la mayoría de los escenarios.
En C #, es idiomático llamar a Dispose
por medio de un bloque de using
, que es azúcar sintáctica para un bloque try-finally que dispone finalmente, por ejemplo:
using (FileStream stream = new FileStream(path))
{
// ...
}
es funcionalmente idéntico a
FileStream stream;
try
{
stream = new FileStream(path);
// ...
}
finally
{
if (stream != null)
stream.Dispose();
}