トピックに似ています:ファイル(ストリームから)をメモリ(memorystream)に読み込んで、アプリケーションの速度を向上させたい。どうやってするの?ストリーム全体をMemoryStreamにロードするには?
19
A
答えて
51
いくつかのオプション:
...最初のバイト配列にそれをすべて読みます
byte[] data = File.ReadAllBytes(file);
MemoryStream stream = new MemoryStream(data);
または.NET 4のCopyToメソッドを使用する
MemoryStream memoryStream = new MemoryStream();
using (Stream input = File.OpenRead(file))
{
input.CopyTo(memoryStream);
}
memoryStream.Position = 0;
または手動で
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
私は、最初のメソッド 'File.ReadAllBytes'が、メモリ消費量が行く限り(「.NET 4.5」)、「CopyTo」メソッドとはかなり異なる動作をしていることに気付きました。具体的には、 'File.ReadAllBytes'メモリを使ってタイトなループで何十ものファイルを読むことは、' CopyTo'バージョンと同様に再利用されません。もう少し調査する価値があるかもしれない。 –
8
あなたはFile.ReadAllBytesがあなたのために働く必要があり、メモリ内のファイル全体を保持することができる場合:
using (var ms = new MemoryStream(File.ReadAllBytes(file)))
{
// do work
}
関連する問題
- 1. memorystreamにXMLをロードする
- 2. データベース全体をメモリにロード
- 3. テーブル全体をモデルにロードするには?
- 4. システム全体にロードされたライブラリをキャプチャするには?
- 5. ページ全体がロードされる前にbootstrap-select.jsをロードするには?
- 6. mySQLテーブル全体をPHP配列にロード
- 7. jarのクラス全体をバイト配列でロードするには?
- 8. sparkでテーブル全体のロードを停止するには?
- 9. SQL実行前にテーブル全体をRAMにロードするヒント?
- 10. 複数のスレッドでMemoryStreamにストリームを読み取る
- 11. rxjsが最初にストリーム・チェーン全体を完成させます
- 12. BufferedReaderはファイル全体をメモリにロードしますか?
- 13. 角度のあるアプリ全体を動的にロードする
- 14. ページ全体をモーダルにロードする(アングル・ブートストラップ)
- 15. コレクション全体をロードせずに列挙するファイル
- 16. プロジェクト全体をコンパイル&リンクせずに `stack ghci`をロードするには?
- 17. MemoryStream - PDFをマージするときに閉じたストリームにアクセスできない
- 18. memorystreamをファイルにダウンロードするには?
- 19. MemoryStreamをasp:imageコントロールにバインドするには?
- 20. Inodeテーブル全体がメインメモリにロードされるのですか?
- 21. cefSharpページ全体がロードされたときに検出する
- 22. 初期ロード時にブラウザウィンドウ全体を埋める方法
- 23. Python FTP "チャンク"イテレータ(ファイル全体をメモリにロードせずに)
- 24. ファイル全体をメモリにロードせずにストリーミングしたJSファイルアップローダ
- 25. JSON.Dumpはストリーム全体をキャプチャしません
- 26. HTMLファイルを出力ストリームにロードする
- 27. Scannerクラスはファイル全体を一度にメモリにロードしますか?
- 28. ギャラリー全体をズームするには?
- 29. gitリポジトリ全体をクローンするには
- 30. Sharepointサイト全体をダウンロードするには?
あなたはStreamReader.ReadToEndメソッドを使用することができ、それを行います。これにより、すべてのファイルが文字列に読み込まれます。なぜそれをストリームに読みたいのですか? streamReaderはストリームを使用するので、必要に応じてストリームから読み込み、フレームワークを使用して物を最適化することができます。 –
@AmiramKorach:これはテキストだと仮定しています。 StreamReaderはテキストデータにのみ適しています*。 –