2010-08-20 14 views
6

Debo admitir que nunca entendí de qué se tratan las transmisiones, siempre pensé que era algo de 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 archivos cargados:Cargando un archivo de imagen Image.FromFile VS FileStream

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); 
} 

Respuesta

15

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

El uso de una secuencia es más flexible, pero a menos que necesite esa flexibilidad, vaya con la solución de archivos.

+0

¿Qué método es mejor cuando necesito acceder a mi imagen desde muchos puntos al mismo tiempo ?. Como mostrar la imagen en 3 lugares al mismo tiempo y editar también. – iamCR

+0

@SanthoshKumar: Es difícil responder a eso sin más información, que debería ser una pregunta diferente. Esperaría que 'Image.FromFile' estuviera bien. –

2

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

Por lo que veo, los dos métodos no hacen lo mismo tampoco. El primero te da la primera imagen en "C:\" donde el segundo solo te da una imagen de un camino. Entonces, la complejidad añadida en el primero no es solo porque está usando transmisiones.

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.

3

Si desea tratar con archivos de imagen, por supuesto, la segunda solución es mejor. En su primera sección, tiene Bitmap bitmap = new Bitmap(fileStream);, sabe que un archivo de imagen no siempre es Bitmap, sino que también puede ser JPEG/PNG/TIFF, etc. Mientras que Image.FromFile es bastante profesional para tratar con archivos de imagen con diferentes extensiones.

En general, FileStream es común en los problemas de archivos, mientras que Image.FromFile es más particular en los archivos de imagen. Depende de qué tipo de archivos va a tratar.

2

Bueno, un archivo a menudo se trata como una secuencia también. Es por eso que la clase principal para abrir archivos se llama FileStream. Pero hay una característica específica del sistema operativo que puede hacer que ocuparse de los archivos de imagen sea un lote más eficiente. Se llama 'archivos mapeados en la memoria', una característica que asigna el contenido de un archivo directamente a la memoria. Hay un poco de humo y espejos involucrados, pero esencialmente hace que el archivo esté disponible directamente sin tener que leerlo. La memoria que necesita para almacenar los datos del archivo no ocupa espacio en el archivo de paginación.

Muy eficiente, lo obtendrá de forma gratuita cuando utilice FromFile() o el constructor Bitmap (cadena) para una imagen en el formato .bmp. Cargar una imagen de una secuencia tiende a requerir dos veces la cantidad de memoria, siempre es un problema con las imágenes grandes.

Cuestiones relacionadas