Skip to content

Corrigir vazamento de memória na classe ArquivoRetornoCrb643.cs devido ao StreamReader não sendo descartado corretamente #1011

@renansj

Description

@renansj

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions