2011-08-05 10 views
11

Me preguntaba si hay una biblioteca .NET o una herramienta de terceros para ejecutar Entity Framework como consultas LINQ en documentos XML. Sé que ya hay LINQ to XML que le permite ejecutar consultas en un objeto XDocument que está YA cargado en la memoria, pero ¿qué sucede si el documento XML es extremadamente grande (más de un gigabyte)?Linq a XML, rendimiento y otros

Me gustaría tener la opción de pasar esta consulta a un XmlReader en lugar de a un objeto XDocument. ¿Es posible directamente de la caja?

+0

Ok, después de buscar un poco más que he encontré con este tema: http://stackoverflow.com/questions/2441673/reading-xml-with-xmlreader-in-c Y esto: http://blogs.msdn.com/b/xmlteam/archive/2007/03/24/streaming-with-linq-to-xml-part-2.aspx He estado pensando en resolver este problema usando casi la técnica exacta , pero todavía carece de soporte completo y mejor rendimiento. –

Respuesta

3

Eche un vistazo a this codeplex project.

+0

Exactamente lo que estaba buscando, ¡me encanta la forma en que está codificado también! Gracias! –

1

No creo que tendrá una solución que se ajuste a todos los documentos XML, pero se puede hacerlo.

Crearía una clase que implementa IEnumerable<T> y toma el XmlReader que desea transmitir.

Luego, crearía el tipo que se utilizará para el parámetro de tipo T en su implementación de IEnumerable<T>.

vez que haya que, en su implementación de GetEnumerator, que llamarían los diversos métodos Move* y Read* sobre la XmlReader que permitirán a construir la única instancia de T.

Cuando tiene una instancia de T disponible, debe usar yield return para obtener el artículo. El resto del cuerpo de GetEnumerator se activaría correctamente al transmitir a través del XmlReader.

Con eso en la mano, va a transmitir instancias de T como las obtiene, sin tener que cargar todo el documento en la memoria en primer lugar.

Debe probar, por supuesto, la cantidad de documento que desea leer a la vez.

+0

Gracias, encontré algunas soluciones similares utilizando la técnica que mencionaste anteriormente, pero me encantaron las herramientas de terceros jdv publicadas. –