Pregunta

He de reconocer que nunca he entendido cuáles son las corrientes están sobre- Siempre he pensado que es una cosa internet. Pero ahora me encuentro con un código que utiliza una corriente para cargar un archivo necesitas cigarros y me pregunto si hay ventaja para el uso de una corriente más ... así como yo siempre cargado archivos:

private void loadingfromStream()
{
   DirectoryInfo dirInfo = new DirectoryInfo("c:/");
   FileInfo[] fileInfoArr = dirInfo.GetFiles();
   FileInfo fileInfo = fileInfoArr[0];       

   // creating a bitmap from a stream
   FileStream fileStream = fileInfo.OpenRead();            
   Bitmap bitmap = new Bitmap(fileStream);  
   Image currentPicture = (Image)bitmap       
}

vs.

private void loadingUsingImageClass
{    
   Image currentPicture = Image.FromFile(originalPath);
}
¿Fue útil?

Solución

Si sabe su código estará cargando los datos de un archivo, el uso Image.FromFile - es obviamente código en lugar más simple, y es muy posible que hay optimizaciones en el marco cuando se ocupan de archivos.

El uso de una corriente es más flexible, pero a menos que necesidad que la flexibilidad, ir con la solución de archivo.

Otros consejos

Si usted quiere tratar con archivos de imagen, por supuesto, la segunda solución es mejor. En su primera sección, usted tiene Bitmap bitmap = new Bitmap(fileStream); sabe que un archivo de imagen de mapa de bits no es siempre, también puede ser JPEG / PNG / TIFF y así sucesivamente. Mientras Image.FromFile es bastante profesional para hacer frente a los archivos de imagen con diferentes extensiones.

En términos generales, FileStream es común a problemas de archivo, mientras que Image.FromFile es más particular, a los archivos de imagen. Depende de qué tipo de archivos que se van a tratar.

Como una adición a la respuesta Jon's:

Por lo que veo, los dos métodos no hacen lo mismo tampoco. La primera que se da la primera imagen de "C:\" donde el segundo sólo le dan una imagen de un camino. Por lo tanto la complejidad añadida en la primera no es sólo porque está utilizando corrientes.

Esto sería equivalente:

using (var fs = File.OpenRead(path))
using (var img = Image.FromStream(fs))
{
    //...
}

y en ese caso, sin duda es mejor que simplemente lo hacen con Image.FromFile como se explica Jon.

Bueno, un archivo es a menudo tratada como una corriente también. Es por eso que la clase primaria a los archivos abiertos se llama FileStream. Pero hay una característica de funcionamiento del sistema específico que puede hacer que se trata de una imagen Archivos mucho más eficiente. Se llama 'memoria mapeada files', una función que mapea el contenido de un archivo directamente a la memoria. Hay un poco de humo y espejos involucrados, pero que, esencialmente, hace que el archivo directamente disponibles sin tener que leerlo. La memoria se necesita para almacenar los datos del archivo no ocupa espacio en el archivo de paginación.

muy eficiente, que obtendrá de forma gratuita cuando se utiliza FromFile () o el constructor (cadena) de mapa de bits de una imagen en el formato .bmp. Carga de una imagen de una corriente tiende a requerir dos veces la cantidad de memoria, siempre un problema con grandes imágenes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top