-
Notifications
You must be signed in to change notification settings - Fork 382
Description
Na classe ArquivoRetornoCrb643.cs, atualmente não há um controle adequado para liberar os recursos utilizados pelo StreamReader, o que pode resultar em um vazamento de memória durante a leitura do arquivo de retorno.
O código atual da função LerArquivoRetorno não faz uso de um bloco using ou de um fechamento explícito do StreamReader, o que impede a liberação adequada do recurso.
Solução proposta:
A solução seria garantir que o StreamReader seja descartado corretamente, utilizando o método Dispose() no final da execução, para liberar os recursos de maneira apropriada. Isso pode ser feito colocando o Dispose() dentro de um bloco finally, assegurando que o StreamReader seja fechado corretamente, independentemente de exceções ocorrendo durante a leitura do arquivo.
A modificação sugerida para a função LerArquivoRetorno seria a seguinte:
public override void LerArquivoRetorno(IBanco banco, Stream arquivo)
{
var streamReader = new StreamReader(arquivo);
try
{
var linha = streamReader.ReadLine();
var textPosReader = new TextPosReader();
while (!string.IsNullOrEmpty(linha))
{
var linhaCbr643 = textPosReader.Read(linha);
OnLinhaLida(linhaCbr643);
linha = streamReader.ReadLine();
}
}
finally
{
streamReader.Dispose();
}
}Explicação da mudança
O método Dispose() é chamado no bloco finally para garantir que o StreamReader seja fechado e seus recursos sejam liberados, independentemente de ocorrerem exceções durante a leitura do arquivo.
Caso necessário, estou à disposição para implementar e subir o PR com a correção proposta. Basta me informar e eu ficarei feliz em contribuir com a implementação da solução.