Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Realmente usam buffer em produção

Sei que a ideia do curso é ensinar tbm, mas eu tava pesquisando por conta e pra ler o arquivo e transcrever daria pra fazer desse jeito bem mais
simples:

 var pathRaw = "C:\\Users\\Pichau\\Downloads\\CsharpArquivos-main\\contas.txt";
      using var fluxo = new FileStream(pathRaw, FileMode.Open, FileAccess.Read, FileShare.Read);
      using var reader = new StreamReader(fluxo);


int contador = 0;
  while (!reader.EndOfStream)
  {
      contador++;

  var linha = reader.ReadLine();
  Console.WriteLine(linha);


  }
  Console.WriteLine($"\n{contador}");
  var totalLinhas = File.ReadLines(pathRaw).Count();
  Console.WriteLine(totalLinhas);
 }

e daí eu queria saber se em produção usaria o buffer e quando usaria esse método, se puderem me explicar melhor essa parte de quando usar cada um dos jeitos ajudaria muito

1 resposta
solução!

Oii, Guilherme!

Que excelente observação. É muito comum sentirmos que estamos "dando voltas" ao aprender a manipular o buffer manualmente quando existem classes que resolvem tudo em poucas linhas, como o StreamReader ou o File.ReadAllLines.

Sua dúvida toca em um ponto fundamental da computação: a diferença entre abstração (facilidade) e controle (performance/recursos).

Sim, o uso de buffers é o padrão em produção, mas raramente você precisará gerenciá-los manualmente como estamos fazendo agora no curso. O StreamReader que você usou, por exemplo, utiliza um buffer internamente por padrão.

  1. Quando usar o File (ReadAllLines / ReadAllText):

Esta é a forma mais simples, porém carrega todo o conteúdo pra a memória RAM de uma vez.

  • Use quando: O arquivo é pequeno (alguns KB ou poucos MB) e você tem memória sobrando.
  • Evite quando: O arquivo tem centenas de megabytes ou gigabytes. Se você tentar abrir um arquivo de 10GB assim em um servidor com 8GB de RAM, a aplicação vai travar com um erro de OutOfMemoryException.
  1. Quando usar o StreamReader (Sua sugestão)

É o meio-termo ideal. Ele lê o arquivo linha por linha, o que poupa memória, e já gerencia o buffer para você.

  • Use quando: Você precisa processar arquivos de texto de forma sequencial e não quer se preocupar com bytes ou codificação manual. É o mais comum no dia a dia do desenvolvimento C#.
  1. Quando usar o FileStream com Buffer manual

Este é o nível mais baixo de acesso ao disco.

  • Use quando:
  • Arquivos binários: Se você estiver lendo uma imagem, um vídeo ou um arquivo compactado, não existem "linhas", apenas bytes. O StreamReader não serve aqui.
  • Performance extrema: Em sistemas que precisam processar milhões de registros por segundo, o controle manual do buffer permite evitar que o C# crie muitos objetos temporários (strings), o que sobrecarrega o coletor de lixo (Garbage Collector).
  • Comunicação de rede: Ao receber dados via TCP/IP, as informações chegam em "pacotes". Você precisa de um buffer para ir montando a mensagem conforme os dados chegam.

Por que o curso ensina assim?

O objetivo é que você entenda como o computador funciona por baixo do capô. Quando você usa o reader.ReadLine(), o C# está fazendo exatamente o que estamos aprendendo: preenchendo um buffer de bytes, procurando pelo caractere de "quebra de linha" e convertendo esses bytes em texto para você.

Entender o buffer te dá fundamentos pra trabalhar com qualquer tecnologia, desde drivers de hardware até sistemas de streaming de vídeo.

Espero que isso tenha esclarecido.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!