Pregunta

Necesito consejo. Tengo una aplicación que importa 10,000 filas que contienen el nombre & amp; dirección de un archivo de texto en XElements que posteriormente se agregan a una cola sincronizada. Cuando se completa la importación, la aplicación genera hilos de trabajo que procesan los XElements al desconectarlos, hacer una llamada a la base de datos, insertar la salida de la base de datos en el documento de solicitud e insertar el documento procesado en una cola de salida. Cuando se han procesado todas las solicitudes, la cola de salida se escribe en el disco como un documento XML.

Utilicé XElements para las solicitudes porque necesitaba la flexibilidad para agregar campos a la solicitud durante el procesamiento. es decir, dependiendo del tipo de trabajo, la aplicación puede requerir que agregue un número de teléfono, fecha de nacimiento o dirección de correo electrónico a una solicitud basada en una coincidencia de nombre / dirección con una base de datos de registros públicos.

Mi pregunta es; Parece que XElements usa bastante memoria y sé que se analiza mucho a medida que el documento avanza por los métodos de procesamiento. Estoy considerando reemplazar los XElements con un objeto Dictionary pero soy escéptico de que la ganancia valga la pena. En esencia, logrará lo mismo.

¿Pensamientos?

¿Fue útil?

Solución

¿Entonces no estás usando ningún XML como tal? ¿Estás usando XElement como una colección de pares de nombre / valor? Si es así, definitivamente usaría un diccionario. Esperaría que su código también salga más limpio.

Por otro lado, si realmente está utilizando XML, probablemente quiera seguir con XElement .

¿Realmente tienes un problema ? Dices que está usando bastante memoria: ¿tienes suficiente memoria? ¿Podrías comprar más memoria? Es casi seguro que sería más barato que pasar incluso algunas horas refactorizando, si es solo por ahorrar memoria. (Parece que esta aplicación solo se ejecuta en un cuadro, podría estar equivocado. Cuanto más se implementa, probablemente tenga más sentido dedicar un tiempo a optimizarla).

EDITAR: De acuerdo, comprar más memoria no es realmente viable. Aun así, ¿realmente tienes un problema? ¿Cuál es el impacto de esto tal vez usando más memoria de la que necesita? ¿Qué realmente le está costando?

Otros consejos

Usar LINQ puede tener sentido si puede evitar tener que almacenar todo el árbol antes de usarlo.

Me gustaría ver la mayor cantidad de procesamiento posible en la construcción de la consulta de cada fila.

Luego toma los resultados de la consulta y luego los procesa, almacenando el resultado en la base de datos.

Esto reducirá los problemas de memoria, ya que cada fila solo se lee cuando es necesario y luego se procesa y guarda.

Puede resultarle útil: http: // www.onedotnetway.com/tutorial-reading-a-text-file-using-linq/

Tome los resultados de su consulta, realice un ciclo for a través de cada Cliente y guarde el registro:

var query =
        from c in
            (from line in File.ReadAllLines(filePath)
             let customerRecord = line.Split(',')
             select new Customer()
                 {
                     Firstname = customerRecord[0],
                     Lastname = customerRecord[1],
                     PhoneNumber = customerRecord[2],
                     City = customerRecord[3],
                     Country = customerRecord[4]
                 })
        where c.Country == "UK"
        select c;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top