XML - Aumentar performance

<< Click to Display Table of Contents >>

Navigation:  XML >

XML - Aumentar performance

Previous pageReturn to chapter overviewNext page

Intro

 

Em termos de desempenho o XmlDocument, XmlTextReader e XDocument não tem muita diferença com até 500 itens. A partir dai o XmlTextReader se destaca, enquanto o XmlDocument e XDocument vão ficando bem mais lentos.

O XmlTextReader é o mais rápido, depois o XDocument e por último o XmlDocument.

Mas o que pode fazer o XML ficar muito lento para carregar é o DTD - Document Type Declaration.

Quando o XML tem DTD declarado, ele vai ser validado durante a leitura e interpretação do arquivo XML.

A lentidão na leitura de XML ocorre quando o DTD é externo, e se agrava quando o arquivo DTD importa outros dados externos. Ou seja, o .dtd pode fazer "import" de outros dados externos.

 

No exemplo que vou mostra o DTD é este abaixo.

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

Quando o DTD não faz referência a dados externos, podemos armazená-lo localmente no mesmo diretório do XML e mudar a chamada do .dtd como mostrado na linha abaixo:

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd">

 

Resolvendo

 

A nível de código, existe outra alternativa. Podemos ignorar o DOCTYPE na leitura de XML, basta utilizar o XmlReaderSettings para definir as configurações de validação.

Mas lembre-se, algumas vezes DTD pode ser essencial, então ignora-lo pode causar problemas.

 

Exempo 1 - Para poder utilizar o XmlReaderSettings vamos substituir o XmlTextReader por XmlReader.

 

Antes:

 

//Lendo XML com XmlTextReader

XmlTextReader reader = new XmlTextReader(Server.MapPath("~/exemplo.xml"));

 

Depois:

 

//Definir as configurações de validação

XmlReaderSettings settings = new XmlReaderSettings();

//Use XmlReaderSettings.DtdProcessing para Framework 4, 4.5

settings.DtdProcessing = DtdProcessing.Ignore;

//Criar um XmlReader com as validações definidas acima

XmlReader reader = XmlTextReader.Create(Server.MapPath("~/exemplo.xml"), settings);

 

Exemplo 2 - Utilizar XmlDocument com XmlReader e XmlReaderSettings

 

Antes:

 

XmlDocument xmlDoc = new XmlDocument();

xmlDoc.Load(Server.MapPath("~/exemplo.xml"));

 

Depois:

 

//Definir as configurações de validação

XmlReaderSettings settings = new XmlReaderSettings();

//Use XmlReaderSettings.DtdProcessing para Framework 4, 4.5

settings.DtdProcessing = DtdProcessing.Ignore;

//Criar um XmlReader com as validações definidas acima

XmlReader xmlReader = XmlTextReader.Create(Server.MapPath("~/exemplo.xml"), settings);

XmlDocument xmlDoc = new XmlDocument();

//Ler o XML a partir do XmlReader

xmlDoc.Load(xmlReader);     

 

Fonte

 

http://cbsa.com.br/post/xml-lento-ao-carregar-c.aspx