Me gusta en el tema: Quiero leer datos de un archivo (de la secuencia) en la memoria (memorystream) para mejorar la velocidad de mi aplicación. ¿Cómo hacerlo?¿Cómo cargar toda la secuencia en MemoryStream?
19
A
Respuesta
51
algunas opciones:
leerlo todo en una matriz de bytes primera ...
byte[] data = File.ReadAllBytes(file);
MemoryStream stream = new MemoryStream(data);
O uso .NET método CopyTo de 4
MemoryStream memoryStream = new MemoryStream();
using (Stream input = File.OpenRead(file))
{
input.CopyTo(memoryStream);
}
memoryStream.Position = 0;
o hacerlo manualmente
MemoryStream memoryStream = new MemoryStream();
using (Stream input = File.OpenRead(file))
{
byte[] buffer = new byte[32 * 1024]; // 32K buffer for example
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
memoryStream.Write(buffer, 0, bytesRead);
}
}
memoryStream.Position = 0;
+0
Me he dado cuenta de que el primer método 'File.ReadAllBytes' se comporta bastante diferente al método de" CopyTo "en lo que respecta al consumo de memoria (.NET 4.5). Específicamente, la lectura de decenas de archivos en un ciclo cerrado con la memoria 'File.ReadAllBytes' no se recupera tan bien como la versión' CopyTo'. Podría valer más investigación. –
8
Si puede mantener el archivo completo en la memoria, File.ReadAllBytes debe trabajar para usted:
using (var ms = new MemoryStream(File.ReadAllBytes(file)))
{
// do work
}
Cuestiones relacionadas
- 1. ¿Cómo volver a cargar un div sin volver a cargar toda la página?
- 2. iniciar animación css3 después de cargar toda la página
- 3. ¿Cómo implementar SkipWhile con Linq en Sql sin cargar primero toda la lista en la memoria?
- 4. Anexando a MemoryStream
- 5. Analizador MemoryStream en Python
- 6. Delphi, FileStream y MemoryStream
- 7. PDFsharp guardar en MemoryStream
- 8. StreamWriter escribiendo en MemoryStream
- 9. "Chunked" MemoryStream
- 10. MemoryStream desactiva la lectura cuando se devuelve
- 11. Hibernate - Cómo persistir un nuevo elemento en una Colección sin cargar toda la Colección
- 12. ¿Cómo agregar un producto en una lista sin cargar toda la base de datos?
- 13. MemoryStream leak
- 14. BinaryFormatter con MemoryStream Pregunta
- 15. Necesita cargar toda la base de datos postgreSQL en la RAM
- 16. Memorystream y Large Object Heap
- 17. ¿Cómo rastrear toda la Wikipedia?
- 18. ¿Cómo borrar toda la matriz?
- 19. Cómo colocar toda la tabla en MySQL?
- 20. memorystream - stringstream, string, otros?
- 21. Hacer una vista (inicializado desde initWithNibName) cargar toda su subvista
- 22. ¿Cómo visualizo un cuadro de diálogo jquery antes de cargar toda la página?
- 23. Escribir en MemoryStream con StreamWriter devuelve vacío
- 24. Deserialización que no trabaja en MemoryStream
- 25. Guardar un mapa de bits en un MemoryStream
- 26. Con FileStreamResult, ¿cómo se cierra MemoryStream?
- 27. ¿Cómo detectar el final de la secuencia?
- 28. Obtener Imagesource de MemoryStream en C# WPF
- 29. Leer desde un gran MemoryStream en C#
- 30. desea volver a utilizar MemoryStream
Usted puede utilizar el método StreamReader.ReadToEnd. Esto leerá todo el archivo en una cadena. ¿Por qué quieres leerlo en una transmisión? StreamReader usa una secuencia para que pueda leer de ella según lo necesite y contar con el marco para optimizar las cosas. –
@AmiramKorach: Por un lado, supones que esto es texto. StreamReader es * solo * apropiado para datos de texto. –