title: Receiving an out of memory exception with memorystream
body: <p>I'm attempting to write an application that will work with the open source media management platform, Kaltura.  Kaltura has provided some C# client libraries that talk to their web API and I have been able to talk to the server and upload videos successfully.  The problem I am having is that once files reach a certain size, I receive an out of memory exception and the program crashes.  I would like to attempt to fix this issue and submit the improved code back to the open source project, but being new to C#, I'm not exactly where to start.  Is there a better way than memorystream to do what they're doing?</p>
  
  <p>Thanks in advance.</p>
  
  <pre><code>//Problematic code
  
  private void PostMultiPartWithFiles(HttpWebRequest request, KalturaParams kparams, KalturaFiles kfiles)
      {
          string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
          request.ContentType = "multipart/form-data; boundary=" + boundary;
  
          // use a memory stream because we don't know the content length of the request when we have multiple files
          MemoryStream memStream = new MemoryStream();
  
  
          byte[] buffer;
          int bytesRead = 0;
  
          StringBuilder sb = new StringBuilder();
          sb.Append("--" + boundary + "\r\n");
          foreach (KeyValuePair&lt;string, string&gt; param in kparams)
          {
              sb.Append("Content-Disposition: form-data; name=\"" + param.Key + "\"" + "\r\n");
              sb.Append("\r\n");
              sb.Append(param.Value);
              sb.Append("\r\n--" + boundary + "\r\n");
          }
  
          buffer = Encoding.UTF8.GetBytes(sb.ToString());
          memStream.Write(buffer, 0, buffer.Length);
  
          foreach (KeyValuePair&lt;string, FileStream&gt; file in kfiles)
          {
              sb = new StringBuilder();
              FileStream fileStream = file.Value;
              sb.Append("Content-Disposition: form-data; name=\"" + file.Key + "\"; filename=\"" + Path.GetFileName(fileStream.Name) + "\"" + "\r\n");
              sb.Append("Content-Type: application/octet-stream" + "\r\n");
              sb.Append("\r\n");
  
              // write the current string builder content
              buffer = Encoding.UTF8.GetBytes(sb.ToString());
              memStream.Write(buffer, 0, buffer.Length);
  
              // write the file content
              buffer = new Byte[checked((uint)Math.Min(4096, (int)fileStream.Length))];
              bytesRead = 0;
              while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                  memStream.Write(buffer, 0, bytesRead);
  
              buffer = Encoding.UTF8.GetBytes("\r\n--" + boundary + "\r\n");
              memStream.Write(buffer, 0, buffer.Length);
          }
  
          request.ContentLength = memStream.Length;
  
          Stream requestStream = request.GetRequestStream();
          // write the memorty stream to the request stream
          memStream.Seek(0, SeekOrigin.Begin);
          buffer = new Byte[checked((uint)Math.Min(4096, (int)memStream.Length))];
          bytesRead = 0;
          while ((bytesRead = memStream.Read(buffer, 0, buffer.Length)) != 0)
              requestStream.Write(buffer, 0, bytesRead);
  
          requestStream.Close();
          memStream.Close();
      }
  </code></pre>