viernes, 9 de abril de 2010

XML en Windows Mobile

Uno de los últimos proyectos en los que estoy trabajando consiste en un sincronizador SERVER <-> PDA basado en servicios Web.

Uno de los requisitos es que toda la información con la que trabaje la PDA sean XML de estructura conocida, pues las aplicaciones que pueden haber detrás son múltiples.

Lo anterior es un poco de background del proyecto que no precisa mayor explicación. El objetivo del post es mostrar los resultados de los experimentos efectuados en una Toshiba G810 con Windows Mobile 6.1 en lo que se refiere al tratamiento masivo de XML con una aplicación Microsoft .Net Mobile 3.5 en C#


Los experimentos consisten en parsear un dataset de 5000 registros con un XML cada registro, y este XML con 5 elementos de segundo nivel, esto es, algo como:

<elements><element name="nnn" value="vvv" />...<element name="nnn" value="vvv" /></elements>

Con el resultado, construir un DataSet cuyas cabeceras tengan los nombres de los elementos (atributo name), y cuyas filas los valores contenidos en ellos (atributo value), para poder enlazarlo a un control grid.


Las opciones para parsear son varias, y también los resultados obtenidos:

  • XMLDocument + SelectNodes:

    El primer experimento consiste en utilizar DOM para acceder a los XML individuales. Para cada XML se construye su XMLDocument, se efectúa un SelectNodes y se extrae la información de sus atributos name y value

    Tiempo 1:58min

  • IndexOf + SubString:

    El segundo experimento consiste en utilizar las funciones de tratamiento de cadenas (IndexOf y SubString) para obtener el contenido de name y value de cada nodo

    Tiempo 0:41min

  • XmlDocument + IEnumerator:

    El tercer experimento consiste en utilizar DOM para construir el documento a partir de cada XML, pero en lugar de buscar sus nodos con selectnodes, se recorren sus atributos con su enumerator, comprobando qué atributo estamos leyendo, name o value

    Tiempo 1:49min

  • XMLDocument:

    Tras lo anterior se decide comprobar únicamente la creación del documento DOM y se observa que lleva prácticamente la mitad del tiempo del proceso total

    Tiempo 0:40min

  • RegularExpressions:

    Comprobando el buen resultado de las funciones de cadena frente a las de tratamiento de XML se prueba con una expresión regular que obtiene los valores de los atributos name y value para cada elemento de cada XML.

    Tiempo 1:45min

  • String:

    Puesto que lo que mayor tiempo consume es la construcción del DOM, así como el acceso usando métodos de tratamiento textual es bastante inferior en coste temporal, se prueba a leer y acumular en una variable String cada XML individual para construir un XML global, con el que poder experimentar tanto con DOM como con las funciones de cadena.

    Tiempo 5:41

  • StringBuilder:

    Añadir dinámicamente a una variable tipo String requiere reasignaciones de memoria consecutivas, con lo que se prueba con la clase StringBuilder para al final hacer una conversión a String y poder efectuar experimentos con DOM y con funciones de cadena.

    Resultado OOM Exception


Conclusiones

Las principales conclusiones que se pueden extraer son las siguientes:

  • El tratamiento de XML en un dispositivo móvil, en cualquier caso, es lento

  • No es buena idea realizar un uso intensivo de la memoria (reasignaciones, clases complejas...) porque elevan el tiempo de proceso y provocan fácilmente excepciones del tipo Out Of Memory

  • Los métodos de tratamiento de XML por DOM son lentos frente a búsquedas más rudimentarias con funciones de cadena

  • El tratamiento de las expresiones regulares es lento, por lo que su uso no está justificado siempre que se pueda efectuar el mismo trabajo con funciones de cadena


NOTA: ESTO NO ES UN ESTUDIO RIGUROSO, NO SE HA REPLICADO RESULTADOS, NO SE HAN VAIRADO PARÁMETROS... POR LO QUE, NO TIENE NINGUNA VALIDEZ CIENTÍFICA NI ESTADÍSTICA, PERO DA IDEA DE UNA APROXIMACIÓN A LOS PROBLEMAS QUE SURGEN CUANDO SE DEBE TRATAR GRANDES CANTIDADES DE DATOS XML EN UN DISPOSITIVO MÓVIL Y QUE LA SOLUCIÓN QUIZÁS MENOS ELEGANTE Y MÁS RUDIMENTARIA, ES LA MÁS EFECTIVA

No hay comentarios:

Publicar un comentario