Come nell'argomento: Voglio leggere i dati da un file (dal flusso) in memoria (memorystream) per migliorare la velocità della mia app. Come farlo?Come caricare l'intero flusso in MemoryStream?
19
A
risposta
51
Alcune opzioni:
leggere il tutto in un array di byte prima ...
Oppure utilizzare il metodo CopyTo di .NET 4
MemoryStream memoryStream = new MemoryStream();
using (Stream input = File.OpenRead(file))
{
input.CopyTo(memoryStream);
}
memoryStream.Position = 0;
o farlo 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
Ho notato che il primo metodo 'File.ReadAllBytes' si comporta in modo molto diverso dal metodo" CopyTo "per quanto riguarda il consumo di memoria (.NET 4.5). In particolare, la lettura di dozzine di file in un loop stretto con la memoria 'File.ReadAllBytes' non viene recuperata così come la versione' CopyTo'. Potrebbe valere qualche altra indagine. –
8
Se si riesce a contenere l'intero file in memoria, File.ReadAllBytes dovrebbe funzionare per voi:
using (var ms = new MemoryStream(File.ReadAllBytes(file)))
{
// do work
}
Problemi correlati
- 1. MemoryStream - Impossibile accedere a un flusso chiuso
- 2. Come scaricare memorystream in un file?
- 3. Delphi, FileStream e MemoryStream
- 4. MemoryStream analogico in Python
- 5. Dopo fileStream.CopyTo (memoryStream), memoryStream è nullo
- 6. Come trasferire MemoryStream via Streaming WCF
- 7. Aggiunta a MemoryStream
- 8. Come si "forchetta" un flusso in .NET?
- 9. deserializzazione non funziona su MemoryStream
- 10. C# MemoryStream Encoding vs. Encoding.GetChars()
- 11. Utilizzo di memorystream e DotNetZip in MVC fornisce "Impossibile accedere a un flusso chiuso"
- 12. memorystream - stringstream, stringa, altri?
- 13. MemoryStream nell'utilizzo dell'istruzione - Devo chiamare close()
- 14. Esiste un in flusso di memoria che blocca come un flusso di file
- 15. StreamWriter scrittura su MemoryStream
- 16. PDFsharp save to MemoryStream
- 17. da MemoryStream è vuoto
- 18. Delphi - MemoryStream o FileStream
- 19. MemoryStream a String, e ritorno a MemoryStream senza aggiungere alcun byte (codifica, ecc.)
- 20. Decompressione di un flusso in C#
- 21. Come posso scrivere MemoryStream di byte []
- 22. cartella di lavoro excel da memorystream
- 23. Con FileStreamResult, come viene chiuso il MemoryStream?
- 24. Lettura da un enorme MemoryStream in C#
- 25. Impostazione dell'offset in un flusso
- 26. Leggi Zip ionica come memoria flusso C#
- 27. Utilizzo di MemoryStream per salvare il file .docx C#
- 28. Come ottenere un MemoryStream da uno streaming in .NET?
- 29. Ottenere System.Net.Mail.MailMessage come MemoryStream in .NET 4.5 beta
- 30. StreamReader da MemoryStream UTF8 Encoding
È possibile utilizzare il metodo StreamReader.ReadToEnd. Questo leggerà tutto il file in una stringa. Perché vuoi leggerlo in un flusso? StreamReader utilizza uno stream in modo che tu possa leggerlo come necessario e contare sul framework per ottimizzare le cose. –
@AmiramKorach: Per prima cosa, stai assumendo che questo sia un testo. StreamReader è * solo * appropriato per i dati di testo. –