Исключение из-за нехватки памяти при использовании байта потока файлов для вывода в консоль

У меня есть следующий код, который выдает исключение нехватки памяти при записи больших файлов. Я что-то упускаю?

Я не уверен, почему он выдает ошибку нехватки памяти, так как я думал, что файловый поток будет использовать только 4096 байт для буфера? Я не совсем уверен, что значит «Буфер», чтобы быть честным, и любые советы будут оценены.

 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();
    }

Изменить: 99,999,999 был просто создан, чтобы сделать файл 99MB

Примечание: я прокомментировал prog.Report (i), и он будет работать нормально. Кажется, почему-то ошибка происходит на линии

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

Я не совсем уверен, почему это вызывает ошибку? Таким образом, ошибка могла быть вызвана из-за progressEvent?

Изменить 2: Я следовал совету изменить код так, чтобы он сообщал о прогрессе каждые 4000 байт, используя следующее:

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

По какой-то причине. Теперь я могу писать файлы размером до 900 МБ.

Я предполагаю, что вопрос в том, почему код "Edit 2" позволил бы ему писать до 900 МБ просто отлично? Это потому, что он сообщает о прогрессе и пишет в консоль в 4000 раз меньше, чем раньше? Я не знал, что консоль будет занимать так много памяти, особенно потому, что я предполагаю, что все, что она делает, это выводит "Progress Copied"?

Изменить 3:

По какой-то причине, когда я меняю следующую строку следующим образом:

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

где перед prog.Report (i) стоит «Console.Writeline ()», он будет нормально работать и копировать файл, хотя это займет очень много времени. Это заставляет меня поверить, что по какой-то причине это связано с консолью, но я не уверен, что именно.

Ответы на вопрос(1)

Ваш ответ на вопрос