title: Increase Speed for Streaming Large(1-10 gb) files .Net Core
body: <p>I'm trying to upload *.iso files via my API using multipartform-data and stream them into local folder.
  I used Stream.CopyAsync(destinationStream) and it worked slow, but not too bad. But now I need to report progress. So I used custom CopyTOAsync and added a progress report to it. But the method is very slow(not acceptable at all), even compared to Stream::CopyToASync.</p>
  
  <pre><code> public async Task CopyToAsync(Stream source, Stream destination, long? contentLength, ICommandContext context, int bufferSize = 81920 )
      {
          var buffer = new byte[bufferSize];
          int bytesRead;
          long totalRead = 0;
          while ((bytesRead = await source.ReadAsync(buffer, 0, buffer.Length)) &gt; 0)
          {
              await destination.WriteAsync(buffer, 0, bytesRead);
              totalRead += bytesRead;
              context.Report(CommandResources.RID_IMAGE_LOADIND, Math.Clamp((uint)((totalRead * 100) / contentLength), 3, 99));
          }
          _logger.Info($"Total read during upload : {totalRead}");
      }
  </code></pre>
  
  <p>What I tried:
  default buffer size for Stream::CopyToAsync is 81920 bytes, I used the same value first, then I tried to increase buffer size up to 104857600 bytes- no difference.</p>
  
  <p>Do you have any other ideas on how to improve the performance of custom CopyToAsync?</p>