Leggendo i tempi che ha misurato sto tizio, mi sono chiesto quale possa essere il peso della validazione dell'xml rispetto ad uno schema dato. Ecco i risultati che ho ottenuto considerando i files:

  1. FileSmall: 60 Kb.
  2. FileBig: 15.320 Kb.

Entrambi i files non hanno errori di validazione.

TempiValidazioneXml

Che dire... se non ho sbagliato qualcosa, questo dovrebbe essere il metodo piu' veloce per validare un xml, 21 secondi per validare il file da 15 mega mi sembrano tanti, ma forse nemmeno troppi... in fondo รจ un xml bello grosso no? Voi che ne dite?

Questo il codice usato.

using System; using System.Text; using System.IO; using System.Diagnostics; using System.Xml; using System.Xml.Schema; namespace ConsoleRead { class Program { static void Main(string[] args) { Stopwatch timer = new Stopwatch(); timer.Start(); String fileToRead; fileToRead = "FileSmall.xml"; Console.WriteLine("{0}", fileToRead); ReadWith_XmlReader(fileToRead); Console.WriteLine("XmlReader: {0}", timer.Elapsed.ToString()); ReadWith_XmlReaderValidation(fileToRead); Console.WriteLine("XmlReader Validation: {0}", timer.Elapsed.ToString()); fileToRead = "FileBig.xml"; Console.WriteLine("{1}{1}{0}", fileToRead, Environment.NewLine); ReadWith_XmlReader(fileToRead); Console.WriteLine("XmlReader: {0}", timer.Elapsed.ToString()); ReadWith_XmlReaderValidation(fileToRead); Console.WriteLine("XmlReader Validation: {0}", timer.Elapsed.ToString()); Console.ReadKey(); } private static void ReadWith_XmlReader(string pathFile) { FileStream stream = new FileStream(pathFile, FileMode.Open); XmlReader reader = new XmlTextReader(stream); while (reader.Read()) { } reader.Close(); stream.Close(); stream.Dispose(); } private static void ReadWith_XmlReaderValidation(string pathFile) { XmlSchemaSet sc = new XmlSchemaSet(); sc.Add("http://www.ongari.it/schemas", "MioSchema.xsd"); XmlReaderSettings settings = new XmlReaderSettings(); settings.ValidationType = ValidationType.Schema; settings.Schemas = sc; settings.ValidationEventHandler += new ValidationEventHandler(OnValidationEventHandler); XmlReader reader = XmlReader.Create(pathFile, settings); while (reader.Read()) { } reader.Close(); } private static void OnValidationEventHandler(object sender, ValidationEventArgs e) { Console.WriteLine("* {0} - {1}", e.Severity, e.Message); } } }