2009-03-05 21 views
6

Parece que XslTransform ha quedado obsoleto en favor de XslCompiledTransform. Teóricamente, si estaba haciendo solo una transformación durante la ejecución de mi aplicación, ¿no debería interpretar el XSLT (a través de XslTransform) ser más rápido que compilarlo? Si es así, ¿está XslTransform escrito tan mal que las mejoras realizadas en XslCompiledTransform lo compensan con creces?XslTransform vs XslCompiledTransform

Respuesta

4

Es posible que desee ver las diferencias entre XslTransform documentados y XslCompiledTransformhere y here, y tomar la decisión mismo.

Además, hay algunos casos en que XslTransform es más incompetente. Se trabajó más en seguridad en XslCompiledTransform.

Por lo tanto, una gran cantidad de razones que uno debe considerar el uso de la nueva XslCompiledTransform lugar de la antigua XslTransform, incluso en los casos en que la transformación se llevará a cabo sólo una vez y podría ser un poco más rápido con el viejo XslTransform.

+0

Tenga en cuenta que en algunas transformaciones complejas, XslCompiledTransform puede ser * mucho * más lento que XslTransform, independientemente de la sobrecarga de compilación. Todavía estoy trabajando con el soporte técnico de MS para averiguar exactamente cuál es el problema, pero tenemos un caso en el que el rendimiento de XslCompiledTransform es mucho peor. Sin embargo, esto parece ser un caso, así que, en general, definitivamente estoy de acuerdo en que XslCompiledTransform es preferible – Andy

+0

@Andy, sí, nadie puede confirmar que XslCompiledTransform sea más rápido para * todo *, un número infinito de transformaciones.Sabemos por experiencia que es * generalmente * más rápido. –

2

Bueno, tiene el tiempo de ejecución (lento) de XslTransform frente al tiempo de compilación de XslCompiledTransform más su tiempo de ejecución (rápido). No hay una forma teórica de decidir esta comparación de forma concluyente.

La teoría sugiere: los tiempos de ejecución dependen de la entrada y las operaciones requeridas, y el tiempo de compilación depende de la complejidad del XSLT. La práctica confirma que con la entrada trivial y la XSLT compleja, la ejecución única XslTransform es definitivamente más rápida.

Sin embargo, para todas las aplicaciones reales querrá XslCompiledTransform solo por el hecho de que XslTransform está en desuso y puede muy bien contener fallas que nunca serán corregidas. De hecho, tenía algunas hojas de estilo que se comportaban de forma extraña bajo XslTransform y se ejecutaban perfectamente en XslCompiledTransform.

1

En cualquier caso, debe utilizar XslCompiledTransform ya que XslTransform se ha depreciado y puede eliminarse de versiones futuras de la infraestructura.

+1

Aún no se ha marcado como 'Obsoleto', sin embargo ... –

+0

Se marca como obsoleto ahora –

2

Como un punto de datos sin relación, desperdicié un par de horas depurando un XSLT que solía funcionar bien y ya no funcionaba. Resultó que el XSLT estaba bien, el problema era que el código que lo aplicó se actualizó desde XslTransform (que funcionó perfectamente) a XslCompiledTransform (que lo transforma gravemente), hace un tiempo, y eso desencadenó el error.

Por lo tanto, no está satisfecho con XslTransform siendo Obsoleted, aquí, ya que sólo tenía que volver el código para utilizarlo ... :(

0

Ambos tienen sus propias ventajas y desventajas. Estoy usando ambos pero en diferente escenario. Estoy usando XslTransform para pasar el resultado a una variable de control XML y escribir salida en control literal, pero cuando necesito pasar al control XML en la página, entonces necesito XslCompiledTransform. Esto se debe a que el resultado de ambos métodos es diferente.

System.Web.UI.WebControls.Xml objXML = new System.Web.UI.WebControls.Xml(); 
     System.IO.StringWriter objTextWriter = new System.IO.StringWriter(); 
     System.Web.UI.HtmlTextWriter objHtmlTextWriter = new System.Web.UI.HtmlTextWriter(objTextWriter); 
     XslTransform objTrans = new XslTransform(); 
     objTrans.Load(HttpContext.Current.Server.MapPath(strXslFileName)); 
     objXML.TransformArgumentList = objArgsList; 
     objXML.Transform = objTrans; 
     objXML.Document = objOutputXml; 
     objXML.RenderControl(objHtmlTextWriter); 
     return objTextWriter.ToString(); 



XslCompiledTransform objTrans = new System.Xml.Xsl.XslCompiledTransform(); 
     System.IO.StringWriter objStringReader = new System.IO.StringWriter(); 
     objTrans.Load(HttpContext.Current.Server.MapPath(strXslFileName)); 
     objTrans.Transform(objOutputXml, objArgsList, objStringReader); 
     return objStringReader.ToString().Replace("&lt;br&gt;", "<BR/>"); 
Cuestiones relacionadas