różnica między strumieniem pamięci a strumieniem plików

Podczas serializacji możemy użyć strumienia pamięci lub strumienia plików.

Jaka jest podstawowa różnica między tymi dwoma? Co oznacza strumień pamięci?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;

namespace Serilization
{
    class Program
    {
        static void Main(string[] args)
        {
            MemoryStream aStream = new MemoryStream();
            BinaryFormatter aBinaryFormat = new BinaryFormatter();
            aBinaryFormat.Serialize(aStream, person);
            aStream.Close();
        }
    }
}
Author: Brandon, 2011-11-16

6 answers

Stream jest reprezentacją bajtów. Obie te klasy wywodzą się z klasy Stream, która z definicji jest abstrakcyjna.

Jak sama nazwa wskazuje, strumień plików czyta i zapisuje do pliku, podczas gdy strumień pamięci czyta i zapisuje do pamięci. Odnosi się więc do miejsca, w którym strumień jest przechowywany.

Teraz zależy, jak planujesz użyć obu z nich. Dla przykładu: załóżmy, że chcesz odczytać dane binarne z bazy danych, wejdziesz do MemoryStream. Jednak jeśli chcesz przeczytać plik w Twoim systemie, wejdziesz do strumienia plików.

Jedną z szybkich zalet MemoryStream jest to, że nie ma potrzeby tworzenia tymczasowych buforów i plików w aplikacji.

 61
Author: Enigma State,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-16 18:45:39

W najprostszej formie, MemoryStream zapisuje dane do pamięci, podczas gdy FileStream zapisuje dane do pliku.

Zazwyczaj używam strumienia MemoryStream, jeśli potrzebuję strumienia, ale nie chcę, aby cokolwiek trafiało na dysk, I używam strumienia FileStream podczas zapisywania pliku na dysk.

 6
Author: AllenG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-16 18:44:39

Podczas gdy strumień pliku czyta się z pliku, strumień pamięci może być używany do odczytu danych zmapowanych w pamięci wewnętrznej komputera (RAM). Zasadniczo czytasz / zapisujesz strumienie bajtów z pamięci.

 6
Author: Tudor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-16 18:44:44

Strumień pamięci obsługuje dane za pośrednictwem bufora w pamięci. Strumień plików zajmuje się plikami na dysku.

 2
Author: Christopher Currens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-16 18:45:17

Mając gorzkie doświadczenie w tym temacie, oto czego się dowiedziałem. jeśli wymagana jest wydajność, należy skopiować zawartość strumienia plików do strumienia pamięci. Musiałem przetworzyć zawartość 144 plików, po 528kbajtów każdy i przedstawić wynik użytkownikowi. Trwało to około 250 sekund. (!!!!). Kiedy po prostu skopiowałem zawartość każdego strumienia plików do memorystream (metoda CopyTo) bez zmiany czegokolwiek, czas spadł do około 32 sekund. Zauważ, że za każdym razem, gdy kopiujesz jeden strumień do drugiego, strumień jest dołączany na końcu strumienia docelowego, więc może być konieczne "przewinięcie" go przed skopiowaniem do niego. Mam nadzieję, że to pomoże.

 2
Author: ManosG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-09 11:23:11

Serializowanie obiektów w pamięci jest moim zdaniem mało przydatne. Musisz serializować Obiekt, gdy chcesz go zapisać na dysku. Zazwyczaj serializacja jest wykonywana z obiektu(który znajduje się w pamięci) na dysk, podczas gdy deserializacja jest wykonywana z zapisanego obiektu serializowanego(na dysku) do obiektu (w pamięci).

Więc najczęściej chcesz serializować na dysk, więc używasz strumienia plików do serializacji.

 0
Author: ThunderGr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-05 08:36:47