Excepción de falta de memoria cuando se usa el flujo de escritura del byte de escritura para el progreso de salida a través de la consola

Tengo el siguiente código que arroja una excepción de memoria insuficiente al escribir archivos grandes. ¿Se me escapa algo?

No estoy seguro de por qué arroja un error de falta de memoria, ya que pensé que Filestream solo usaría un máximo de 4096 bytes para el búfer. No estoy completamente seguro de lo que significa el Buffer para ser honesto y cualquier consejo sería apreciado.

 public static async Task CreateRandomFile(string pathway, int size, IProgress<int> prog)
    {
        byte[] fileSize = new byte[size];
        new Random().NextBytes(fileSize);
        await Task.Run(() =>
           {
               using (FileStream fs = File.Create(pathway,4096))
               {

                   for (int i = 0; i < size; i++)
                   {
                       fs.WriteByte(fileSize[i]);
                       prog.Report(i);
                   }

               }

           }
       );
    }

    public static void p_ProgressChanged(object sender, int e)
    {
        int pos = Console.CursorTop;
        Console.WriteLine("Progress Copied: " + e);
        Console.SetCursorPosition (0, pos);
    }

    public static void Main()
    {
        Console.WriteLine("Testing CopyLearning");
        //CopyFile()
        Progress<int> p = new Progress<int>();
        p.ProgressChanged += p_ProgressChanged;
        Task ta = CreateRandomFile(@"D:\Programming\Testing\RandomFile.asd", 99999999, p);
        ta.Wait();
    }

Editar: el 99,999,999 se creó para crear un archivo de 99 MB

Nota: He comentado el informe del programa (i) y funcionará bien. Parece que por alguna razón, el error ocurre en la línea

Console.writeline("Progress Copied: " + e);

No estoy completamente seguro de por qué esto causa un error. Entonces, ¿el error pudo haber sido causado por el evento progressEvent?

Edición 2: he seguido los consejos para cambiar el código de modo que informe el progreso cada 4000 Bytes utilizando lo siguiente:

 if (i%4000==0)
     prog.Report(i);

Por alguna razón. Ahora puedo escribir archivos de hasta 900 MB.

Supongo que la pregunta es, ¿por qué el código de "Editar 2" le permitiría escribir hasta 900 MB bien? ¿Es porque informa sobre el progreso y escribe en la consola hasta 4000 veces menos que antes? No me di cuenta de que la consola ocuparía tanta memoria, especialmente porque supongo que todo lo que está haciendo es generar "Progreso copiado".

Edición 3:

Por alguna razón cuando cambio la siguiente línea de la siguiente manera:

 for (int i = 0; i < size; i++)
      {
          fs.WriteByte(fileSize[i]);
          Console.Writeline(i)
          prog.Report(i);
      }

donde hay una "Console.Writeline ()" antes del prog.Report (i), funcionará bien y copiará el archivo, aunque tomará mucho tiempo hacerlo. Esto me lleva a creer que se trata de un problema relacionado con la consola por alguna razón, pero no estoy seguro de qué.

Respuestas a la pregunta(1)

Su respuesta a la pregunta