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
Es posible que desee ver las diferencias entre XslTransform
documentados y XslCompiledTransform
here 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.
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.
En cualquier caso, debe utilizar XslCompiledTransform ya que XslTransform se ha depreciado y puede eliminarse de versiones futuras de la infraestructura.
Aún no se ha marcado como 'Obsoleto', sin embargo ... –
Se marca como obsoleto ahora –
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 ... :(
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("<br>", "<BR/>");
- 1. ¿Cuál es la alternativa no obsoleta a XmlDataDocument y XslTransform?
- 2. XslCompiledTransform utiliza la codificación UTF-16
- 3. Evite que XslCompiledTransform use etiquetas de cierre automático
- 4. StackOverflowException cargando XsltCompiledTransform
- 5. J2ME VS Android VS iPhone VS Symbian VS Windows CE
- 6. TagSoup vs Jsoup vs HTML Analizador vs vs HotSax
- 7. 'método' vs. 'mensaje' vs. 'función' vs. '???'
- 8. ACE vs Boost vs Poco vs wxWidgets
- 9. VS 2008 vs VS 2008 Express
- 10. Atomikos vs JOTM vs Bitronix vs?
- 11. Acumular vs fold vs reducir vs compress
- 12. .NET vs ASP.NET vs CLR vs ASP
- 13. control.BeginInvoke() Vs Dispatcher Vs SynchronizationContext Vs .. - FIABILIDAD
- 14. método vs función vs procedimiento vs clase?
- 15. Rhino simulacro vs Typemock vs JustMock vs
- 16. inline vs __inline vs __inline__ vs __forceinline?
- 17. Exec vs vs ExecWait ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs vs ExecDos ExeCmd
- 18. bigtable vs cassandra vs simpledb vs dynamo vs couchdb vs hypertable vs riak vs hbase, ¿qué tienen en común?
- 19. Crystalspace vs. Irrlicht vs. .....?
- 20. NetSqlAzMan vs AzMan vs (?????)
- 21. SpiderMonkey vs JavaScriptCore vs.
- 22. Django -vs- Grails -vs-?
- 23. Stackpanel: Altura vs ActualHeight vs ExtentHeight vs ViewportHeight vs DesiredSize vs RenderSize
- 24. Mathematica: sin evaluar vs vs Defer Hold vs vs HoldForm HoldAllComplete vs etc, etc
- 25. NSImage vs. CIImage vs. CGImage?
- 26. Bitmap vs ImageView vs Drawable
- 27. DIP vs. DI vs. IoC
- 28. Boo vs C# vs Python?
- 29. DbConnection vs OleDbConnection vs OdbcConnection
- 30. MySQL vs Firebird vs SQLite
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
@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. –