2016-04-01 11 views
1

ディスクの速度を計算するために大きなランダムファイルを書き込んで、次にそれを読み取ろうとしています。いくつかのアルゴリズムを試しましたが、1GBのファイルを書き込もうとすると、例外またはメモリ例外が発生します。ここで私はいくつか試してみましたされているディスクから大量のファイルをメモリ外に書き出す例外

方法1

byte[] data = new byte[8192]; 
     Random rng = new Random(); 
     using (FileStream stream = File.OpenWrite(filePath)) 
     { 
      for (int i = 0; i < fileSizeMb * 128; i++) 
      { 
       rng.NextBytes(data); 
       stream.Write(data, 0, data.Length); 
      } 
     } 

方法2

const int blockSize = 1024 * 8; 
      const int blocksPerMb = (1024 * 1024)/blockSize; 

      int count = fileSizeMb * blocksPerMb; 

      byte[] data = new byte[blockSize]; 
      Random rng = new Random(); 
      //using (FileStream stream = File.OpenWrite(filePath)) 
      using (StreamWriter sw1 = new StreamWriter(filePath)) 
      { 
       // There 
       for (int i = 0; i < count; i++) 
       { 
        rng.NextBytes(data); 
        sw1.BaseStream.Write(data, 0, data.Length); 
        //stream.Write(data, 0, data.Length); 

       } 
      } 

読む

using (StreamReader sr = new StreamReader(filePath)) 
      { 
       String line = sr.ReadToEnd(); 
      } 
+0

**読み込み中に** OutOfMemoryExceptionが発生していませんか?そして、btw、 'StreamReader/Writer'はテキストデータを読み書きするためのものです。バイナリデータは' Stream'だけを使用します。 –

+0

@Ivanファイルを読むにはどうすればいいですか – nlstack01

答えて

0

方法1

 byte[] data = new byte[8192]; 
     Random rng = new Random(); 
     using (FileStream stream = File.OpenWrite(filePath)) 
     { 
      for (int i = 0; i < fileSizeMb * 128; i++) 
      { 
       rng.NextBytes(data); 
       stream.Write(data, 0, data.Length); 
       stream.Flush(); // BEETLE JUICE 
      } 
     } 

方法

を読む2

 const int blockSize = 1024 * 8; 
     const int blocksPerMb = (1024 * 1024)/blockSize; 

     int count = fileSizeMb * blocksPerMb; 

     byte[] data = new byte[blockSize]; 
     Random rng = new Random(); 
     using (StreamWriter sw1 = new StreamWriter(filePath)) 
     { 
      // There 
      for (int i = 0; i < count; i++) 
      { 
       rng.NextBytes(data); 
       sw1.BaseStream.Write(data, 0, data.Length); 
       sw1.baseStream.Flush(); // BEETLE JUICE 
      } 
     } 

だけ一度に4096のバイトを読んで、メモリにファイル全体を読まないでください。サンプルコード:http://www.csharp-examples.net/filestream-read-file/

+0

正しく読む方法の例を教えてもらえますか? – nlstack01

+0

お楽しみください:http://www.csharp-examples.net/filestream-read-file/ –

関連する問題