XslTransform scheint von Microsoft zugunsten von XslCompiledTransform abgelehnt worden zu sein. Wenn ich während der Ausführung meiner Anwendung theoretisch nur eine Transformation durchführe, sollte das XSLT (durch XslTransform) nicht schneller interpretiert werden, als es zu kompilieren? Wenn ja, wird XslTransform so schlecht geschrieben, dass die Verbesserungen, die an XslCompiledTransform vorgenommen wurden, mehr als kompensieren?XslTransform vs XslCompiledTransform
Antwort
Vielleicht möchten Sie die dokumentierten Unterschiede zwischen XslTransform
und XslCompiledTransform
here und here und machen die Entscheidung selbst sehen.
Darüber hinaus gibt es einige Fälle, in denen XslTransform inkompatibler ist. In XslCompiledTransform wurde mehr an der Sicherheit gearbeitet.
also viele Gründe, sollte man die neue XslCompiledTransform
anstelle des alten XslTransform
, selbst in Fällen, in Betracht ziehen, wo die Transformation wird nur einmal durchgeführt werden und könnte mit dem alten XslTransform etwas schneller sein.
Nun, Sie haben die (langsame) Laufzeit von XslTransform gegen die Kompilierzeit von XslCompiledTransform plus seine (schnelle) Laufzeit. Es gibt keinen theoretischen Weg, diesen Vergleich endgültig zu entscheiden.
Die Theorie schlägt vor: Laufzeiten hängen von Eingabe und erforderlichen Operationen ab und die Kompilierzeit hängt von der Komplexität der XSLT ab. Die Praxis bestätigt, dass mit einfacher Eingabe und komplexer XSLT-Ausführung XslTransform auf jeden Fall schneller ist.
Jedoch für alle realen Anwendungen werden Sie XslCompiledTransform nur für die Tatsache, dass XslTransform veraltet ist und sehr gut Fehler enthalten kann, die nie behoben werden. Ich hatte tatsächlich einige Stylesheets, die sich merkwürdig unter XslTransform verhalten und perfekt unter XslCompiledTransform laufen.
Sie sollten XslCompiledTransform in jedem Fall verwenden, da XslTransform abgeschrieben ist und aus zukünftigen Versionen des Frameworks entfernt werden kann.
Es ist noch als "obsolet" zu markieren, aber ... –
Es ist jetzt als veraltet markiert –
Als ein nicht verwandter Datenpunkt habe ich nur ein paar Stunden verschwendet, um ein XSLT zu debuggen, das früher gut funktionierte und nicht mehr funktionierte. Es stellte sich heraus, dass die XSLT in Ordnung war, das Problem war, dass der Code, der sie anwendete, vor einiger Zeit von XslTransform (was perfekt funktionierte) zu XslCompiledTransform aktualisiert wurde, was den Fehler ausgelöst hat.
Also, nicht glücklich mit XslTransform, hier Obsoleted ist, wie ich nur den Code zurückkehren musste, es zu benutzen ... :(
Beide haben ihre eigenen Vor- und Nachteile. Ich benutze beide aber in unterschiedlichen Ich verwende XslTransform, um die Ausgabe an eine XML-Steuervariable zu übergeben und die Ausgabe im Literalsteuerelement zu schreiben, aber wenn ich das XML-Steuerelement auf der Seite übergeben muss, muss ich XslCompiledTransform verwenden, da die Ausgabe beider Methoden unterschiedlich ist.
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/>");
Beachten Sie, dass auf Bei einigen komplexen Transformationen kann XslCompiledTransform unabhängig vom Kompilierungsaufwand langsamer als XslTransform sein. Ich arbeite immer noch mit MS technischen Support, um genau herauszufinden, was das Problem ist, aber wir haben einen Fall, in dem die Leistung von XslCompiledTransform viel schlechter ist. Dies scheint jedoch ein sehr guter Fall zu sein. Daher stimme ich im Allgemeinen zu, dass XslCompiledTransform vorzuziehen ist. – Andy
@Andy, Ja, niemand kann bestätigen, dass XslCompiledTransform für * all * unendlich viele Transformationen schneller ist.Wir wissen aus Erfahrung, dass es * im Allgemeinen * schneller ist. –