2011-11-16 30 views

答えて

52

ストリームはバイトの表現です。これらのクラスは両方とも、定義によって抽象クラスであるStreamクラスから派生しています。

名前からわかるように、FileStreamはファイルを読み書きしますが、MemoryStreamはメモリを読み書きします。したがって、ストリームが格納されている場所に関係します。

ここでは、これらの両方をどのように使用するかによって異なります。例えば:データベースからバイナリデータを読み込みたいと仮定しましょう。あなたは、MemoryStreamのために入ります。しかし、あなたがあなたのシステム上のファイルを読みたいならば、あなたはFileStreamのために行くでしょう。

MemoryStreamの短所の1つは、一時的なバッファとファイルをアプリケーションに作成する必要がないことです。

+5

オブジェクトは既にメモリに入っているので、なぜセリシスのためにメモリストリームを割り当てるのですか? – Raghav55

+0

メモリストリームは、その論理プログラム「意味」としてではなく、オブジェクトを一連のバイトとして操作するためです。 – Tudor

+0

@ tudor:私は初心者です.net、これについて簡単に説明できますか? – Raghav55

6

最も単純な形式では、MemoryStreamはメモリにデータを書き込み、FileStreamはデータをファイルに書き込みます。

通常、ストリームが必要な場合はMemoryStreamを使用しますが、ディスクにヒットする必要はありません。ディスクにファイルを書き込むときにFileStreamを使用します。

5

ファイルストリームはファイルから読み取りますが、メモリストリームを使用してコンピュータの内部メモリ(RAM)にマップされたデータを読み取ることができます。あなたは基本的にメモリからバイトのストリームを読み書きしています。

+0

大容量のデータを整理する際には、これが優れていますか?データを大きくして利用可能なメモリが小さい場合。この場合、メモリストリームを使用するとWhtが発生しますか? – Raghav55

+1

データが使用可能なメモリを超えると、最終的にディスクにページングが開始されます。システム全体のパフォーマンスが低下するため、これは悪いことです。この場合、ファイルにストリームするだけの方がよいでしょう。 – Tudor

2

メモリストリームは、メモリバッファを介してデータを処理します。ファイルストリームはディスク上のファイルを扱います。

2

苦い経験を​​している人は、ここで私が見つけたことがあります。パフォーマンスが必要な場合は、ファイルストリームの内容をメモリストリームにコピーする必要があります。私は144ファイルの内容をそれぞれ528kバイトずつ処理し、その結果をユーザーに提示しなければなりませんでした。それは250秒aproxかかりました。 (!!!!)。私は、各ファイルストリームの内容を何も変更せずにmemorystream(CopyToメソッド)にコピーしたとき、時間は約32秒に短縮されました。あるストリームを別のストリームにコピーするたびに、そのストリームがデスティネーションストリームの末尾に追加されるので、それをコピーする前に「巻き戻し」する必要があるかもしれないことに注意してください。それが役に立てば幸い。

+7

Bitter experience?!?もちろん、RAM上のファイルを操作することは、ディスク上のファイルを操作するよりも高速になります。あなたは何を期待しましたか? ;-) – tomfanning

0

私の意見では、メモリ内のオブジェクトをシリアライズすることはほとんど役に立ちません。オブジェクトをディスクに保存するときは、オブジェクトをシリアル化する必要があります。通常、シリアル化は、保存されたシリアライズされたオブジェクト(ディスク上)からオブジェクト(メモリ内)にデシリアライズが実行されている間に、オブジェクト(メモリ内にある)からディスクに行われます。

ほとんどの場合、ディスクにシリアル化したいので、シリアル化にFilestreamを使用します。

関連する問題