Podobnie jak w temacie: Chcę odczytywać dane z pliku (ze strumienia) do pamięci (memorystream), aby poprawić szybkość mojej aplikacji. Jak to zrobić?Jak załadować cały strumień do MemoryStream?
19
A
Odpowiedz
51
Kilka opcji:
Czytaj wszystko w pierwszej tablicy bajtów ...
byte[] data = File.ReadAllBytes(file);
MemoryStream stream = new MemoryStream(data);
Lub użyj metody CopyTo .NET 4
MemoryStream memoryStream = new MemoryStream();
using (Stream input = File.OpenRead(file))
{
input.CopyTo(memoryStream);
}
memoryStream.Position = 0;
lub zrobić to ręcznie
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
Zauważyłem, że pierwsza metoda "File.ReadAllBytes' zachowuje się całkiem inaczej niż metoda" CopyTo ", jeśli chodzi o zużycie pamięci (.NET 4.5). W szczególności czytanie kilkudziesięciu plików w ciasnej pętli z pamięcią 'File.ReadAllBytes' nie jest odzyskiwane, podobnie jak wersja' CopyTo'. Może być wart więcej dochodzenia. –
8
Jeśli można trzymać cały plik w pamięci File.ReadAllBytes powinny pracować dla Ciebie:
using (var ms = new MemoryStream(File.ReadAllBytes(file)))
{
// do work
}
Powiązane problemy
- 1. Dołączanie do MemoryStream
- 2. Napis StreamWriter do MemoryStream
- 3. Jak odczytać cały strumień tekstowy w pliku node.js?
- 4. Jak pozbyć się obiektu MemoryStream
- 5. Jak mogę napisać MemoryStream do byte []
- 6. Jak pobrać plik memorystream do pliku?
- 7. Po fileStream.CopyTo (memoryStream), memoryStream ma wartość zerową
- 8. Jak przesłać MemoryStream przez strumieniowanie WCF
- 9. inny dostęp do wątku MemoryStream
- 10. C# Casting do MemoryStream FileStream
- 11. Zapisywanie do odczytu z MemoryStream
- 12. Jak dodać cały projekt do GitHub?
- 13. Jak usunąć strumień pamięci w zadaniu?
- 14. MemoryStream wyłącza czytanie po zwróceniu
- 15. MemoryStream to String, a następnie z powrotem do MemoryStream bez dodawania żadnych bajtów (kodowania itp.).
- 16. Jak napisać strumień do pliku?
- 17. Jak mogę "rozwidlić" strumień w .NET?
- 18. memorystream - stringstream, string, others?
- 19. Chcę ponownie użyć MemoryStream
- 20. BinaryFormatter z MemoryStream Pytanie
- 21. Analog MemoryStream w Pythonie
- 22. Strumień pamięci i duży obiekt
- 23. Strumień danych JPEG do TImage
- 24. Jak napisać skoroszyt programu Excel do obiektu MemoryStream w .NET?
- 25. Strumień C++ do pamięci
- 26. Strumień do pakietu, pakiet do WordDocument, a następnie z powrotem
- 27. W FileStreamResult, jak jest zamknięty MemoryStream?
- 28. Android: jak przekonwertować cały obraz do bitmapy?
- 29. Jak skopiować jeden strumień do tablicy bajtów przy użyciu najmniejszego kodu C#?
- 30. Jak odczytać jeden strumień do drugiego?
Można użyć metody StreamReader.ReadToEnd. Spowoduje to odczytanie całego pliku do ciągu znaków. Dlaczego chcesz go przeczytać w strumieniu? StreamReader używa strumienia, dzięki czemu można go odczytać w razie potrzeby i liczyć na strukturę do optymalizacji. –
@AmiramKorach: Po pierwsze, zakładasz, że to jest tekst. StreamReader jest * tylko * odpowiedni dla danych tekstowych. –