es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La tarea está tomando un tiempo poco razonable para terminar.

Estoy utilizando la biblioteca CsvHelper para leer algunos datos en un archivo de texto ubicado en la misma carpeta que la solución. El archivo de texto tiene alrededor de 12,000 líneas, lo cual no es demasiado.
Sin embargo, tarda más de 10 minutos y hace que la página/navegador diga “Esta página no responde”.

Cuando leo el mismo archivo sin usar Tareas, sino directamente en el método principal, se tarda menos de un segundo en obtener la misma cantidad (12,000) de registros.
¿Estoy utilizando la Tarea de manera incorrecta?

//método dentro de la clase llamadora
private static async Task<iresult> GetEmployees(IEmployeeData data)
{
    try
    {
        return Results.Ok(await data.GetEmployees());
    }
    catch (Exception ex)
    {
        return Results.Problem(ex.Message);
    }
}
//método dentro de la clase que implementa ICsvDataAccess
public Task<><t>> LoadData<t>(string path, bool hasHeaderRecord = false, string delimiter = ";")
{
    return Task.Run(() =>
    {
        var config = new CsvConfiguration(CultureInfo.InvariantCulture)
        {
            HasHeaderRecord = hasHeaderRecord,
            Delimiter = delimiter
        };

        using (var reader = new StreamReader(path))
        using (var csv = new CsvReader(reader, config))
        {
            return csv.GetRecords<t>().ToList().AsEnumerable();
        }
    });
}
//dentro de la clase EmployeeData que implementa la interfaz IEmployeeData
private readonly ICsvDataAccess _file;
public Task<><employeemodel>> GetEmployees() =>
    _file.LoadData<employeemodel>(path: "data.txt");
public interface IEmployeeData
{
    Task<><employeemodel>> GetEmployees();
}
public interface ICsvDataAccess
{
    Task<><t>> LoadData<t>(string path, bool hasHeaderRecord = false, string delimiter = ";");
}

¡Gracias!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Según el código proporcionado, parece que estás utilizando correctamente las Tareas para leer el archivo CSV. Sin embargo, podría haber otros factores que contribuyan al tiempo prolongado de carga que se deben considerar.

    Una posibilidad es que el archivo CSV sea demasiado grande para cargarlo en la memoria de una sola vez. En este caso, podrías intentar cargar el archivo por fragmentos o implementar paginación.

    Otra posibilidad es que haya un cuello de botella en la forma en que se procesan los datos después de cargarlos. Puede ser útil revisar el código que utiliza los datos y ver si hay optimizaciones que se puedan realizar.

    En general, es difícil determinar la causa exacta del lento tiempo de carga sin más información sobre los datos y cómo se están utilizando. Puede resultar útil utilizar herramientas de perfilado o investigar la consola del navegador para obtener más información.

Comments are closed.