title: How to split large files efficiently
body: <p>I'd like to know how I can split a large file without using too many system resources.
  I'm currently using this code:</p>
  
  <pre><code>public static void SplitFile(string inputFile, int chunkSize, string path)
  {
      byte[] buffer = new byte[chunkSize];
  
      using (Stream input = File.OpenRead(inputFile))
      {
          int index = 0;
          while (input.Position &lt; input.Length)
          {
              using (Stream output = File.Create(path + "\\" + index))
              {
                  int chunkBytesRead = 0;
                  while (chunkBytesRead &lt; chunkSize)
                  {
                      int bytesRead = input.Read(buffer, 
                                                 chunkBytesRead, 
                                                 chunkSize - chunkBytesRead);
  
                      if (bytesRead == 0)
                      {
                          break;
                      }
                      chunkBytesRead += bytesRead;
                  }
                  output.Write(buffer, 0, chunkBytesRead);
              }
              index++;
          }
      }
  }
  </code></pre>
  
  <p>The operation takes 52.370 seconds to split a 1.6GB file into 14mb files. I'm not concerned about how long the operation takes, I'm more concerned about the system resource used as this app will be deployed to a shared hosting environment. Currently this operation max's out my systems HDD IO usage at 100%, and slows my system down considerably. CPU usage is low; RAM ramps up a bit, but seems fine.</p>
  
  <p>Is there a way I can restrict this operation from using too many resources?</p>
  
  <p>Thanks</p>