2009-10-11 14 views
10

Me gustaría conocer la diferencia entre XMLReader.Create y new XMLTextReader() para leer XML. ¿Por qué elegiría uno sobre el otro?
¿Hay una diferencia de rendimiento?Diferencia entre XMLReader.Create() y nuevo XMLTextReader()

Sé que XMLReader es un tipo abstracto para XMLTextReader, al menos eso es lo que leí antes, pero vi en algún lugar que la gente sugirió usar métodos XMLReader.Create() en lugar de la nueva instancia de XMLReader().

Gracias de antemano ...

sinceridad.

Respuesta

13

XmlReader.Create le permite especificar XmlReaderSettings, que ninguno de los XmlTextReader constructor sobrecarga hacer.

+0

Gracias, me ayudó mucho. – Tarik

+0

Esa no parece ser la única diferencia, me encontré con un problema donde ninguna configuración podría hacer que XmlReader.Create funcione, pero XmlTextReader funciona bien: http://stackoverflow.com/questions/34257204/different-behaviour- entre-nuevo-xmltextreader-y-xmlreader-create –

1

Para obtener una respuesta general a por qué este tipo de código es del todo es posible que desee echar un vistazo a Factory Method Pattern. El uso de un método de fábrica y una clase/interfaz abstracta le ayuda a escribir un código más general al no vincularse a una implementación específica. Esto puede ayudar a que su código sea más fácil de aprovechar las nuevas características o para ser utilizado en diferentes situaciones.

+0

Gracias, no lo sabía. – Tarik

+0

* sarcasmo en * Oh, sí, y es una verdadera alegría encontrar errores no triviales en múltiples entornos. –

+1

En serio. solo una palabra de advertencia: Factory Pattern puede volverse rápidamente malvado y encender a su amo. Primero, inmediatamente pierde la seguridad en tiempo de compilación. En segundo lugar, mantener la consistencia en muchas versiones puede ser muy doloroso. He visto casos (algunos de ellos míos ;-)) donde el patrón de fábrica se convirtió en una necesidad debido a fallas de diseño importantes en el sistema. No me malinterpreten, todo lo que digo es que en algunas situaciones pueden ser la mejor manera de ocultar algo, pero en otros solo quiere saber :-) –

3

respuesta de Microsoft es simplemente:

Aunque el Microsoft .NET Framework incluye la clase XmlTextWriter, que es una implementación de la clase XmlWriter, en la versión 2.0, se recomienda que utilice el método Create para crear nuevos Objetos XmlWriter. El método Create le permite especificar las características para admitir en el objeto XmlWriter creado, y también le permite aprovechar al máximo las nuevas características introducidas en la versión 2.0.

pero esa respuesta deja de lado la diferencia más importante:

Si llama 'nuevo XMLTextReader' que se encuentra en el modo 'v1compat', lo que hará que tenga el comportamiento de modalidad muy mala en algunos casos, potencialmente lo que lleva a OutOfMemoryExceptions! Vea Why is my new XmlTextReader(stream) reading in many megabytes into memory rather than streaming properly? para más sobre eso.

RECOMENDACIÓN: A menos que realmente necesite el comportamiento de .NET 1.1, entonces NUNCA debe llamar a 'new XmlTextReader', en su lugar siempre llame a 'XmlReader.Create'.

+0

¿Hay alguna manera de poner XmlReader en "v1compat " ¿modo? –

Cuestiones relacionadas