哪個更快,帶有XSLT或帶DataBinding的CLR的XML? 我假設它是CLR + Databinding,但我可能是錯的。哪個更快,XML + XSL或CLR + DataBinding
回答
這實際上是非常接近我自己的心臟問題,因爲幾乎所有我做的工作都是圍繞着XSLT設計層,基於自定義.NET後端產生的數據(我愛系統死亡)。
據我所知,有一些應該牢記的幾件事情:
務必確保您使用System.Xml.Xsl.XslCompiledTransform的高速緩存的實例。這個類使用System.Reflection.Emit按需創建類,絕對泵出你的XSLT轉換快得令人難以置信
使用正確的數據結構作爲輸入到您的XSLT轉換。如果您有XmlDocument(或更好的XPathDocument)可用,請使用它。否則,對於非常大的輸入文檔和轉換傳入xml讀取器(如果可用),因爲XslCompiledTransform會將文檔加載到XPathDocument(爲XPath訪問進行了優化)。僅需添加,System.Xml.XPath中存在一個System.Xml.Linq.XElement類型的擴展方法,它將從XElement創建一個XPathNavigator,如果您的源數據結構是XElement,它將派上用場。
請勿在xsl轉換中使用msxsl:script標籤。 msxsl:腳本標記的編譯方式與xslt的其餘部分不同,並且會在高需求的應用程序中導致嚴重的內存泄漏(它們每次運行xslt都會加載自定義程序集)
避免使用擴展方法可能。我反編譯(反射器FTW)到.NET源代碼,用於在XSLT轉換中執行擴展方法,而其核心實際上只不過是對MethodInfo.Invoke()的調用。一些調用不會破壞你的應用程序,但不要認爲你可以彌補所有XSLT使用擴展方法的缺點(可能在未來版本的框架中改變,因爲它們在自定義哈希系統中緩存擴展方法,很有可能他們可以將它翻譯成使用編譯後的linq表達式,在這種情況下,它會閃電般快)
據我所知,System.Web.UI.DataBinder仍然歸結爲一個調用System.ComponentModel.ReflectPropertyDescriptor使用System.Reflection.MethodInfo.Invoke()爲了評估Eval(「MyProperty」)語句。這將是兩個模型之間在性能方面最大的比較之一。通過最小化反射調用的次數,XSLT在這裏佔上風。
這是非常非常容易寫非調諧XSLT文件。正確使用xsl變量可以真正消除產生xml輸出所需的許多迭代。如果你有一個通常被引用的輸入元素,把它存儲在一個xsl變量中,然後從那裏訪問它。
根據您是否計劃直接寫你的XSL輸出響應流。請記得正確調整緩衝區大小。通過在你的轉換MemoryStream中設置一個默認的緩衝區大小,你可以爲你自己節省大量的內存分配(在xsl轉換的上下文中通常很大)。
儘管這真的歸結爲應用程序級別的問題。在使用XSLT轉換時,避免了控件創建,視圖狀態序列化,事件持久化等等等等的全部開銷......創建一個更簡單的頁面生命週期(獲取數據,轉換,並帶有幾個細微之處)與應該給另一個優勢在於基於XSLT的系統。
總體來說,我的錢肯定是在正確執行XSLT轉換一個很好的結構。特別是在有大量內存可用於內存轉換的系統上。我已經看到XSLT轉型的規模達到了一個相當令人難以置信的水平,而且一旦學習了一些非常重要的關鍵點,實際上就不難保持。
會看看我能記住任何人,如果我這樣做會編輯這個職位......
這個問題的含義很模糊,很難知道這個答案有多少與它真正相關,但即使如此,這也是很好的信息。 – 2009-12-11 20:09:08
您應該基準您的具體使用情況,而不是試圖讓基於錯誤的概括(可能是錯誤的)答案。
+1,但我敢打賭XSLT馬 – 2009-12-11 09:38:03
- 1. 哪個更快 - WebSockets或Ajax?
- 2. 哪個更快,GDI +或libpng?
- 3. 哪個更快? Statement或PreparedStatement
- 4. 哪個更快? NSXMLParser或KissXML
- 5. 哪個更快,XPath或Regexp?
- 6. 更新或刪除哪個更快?
- 7. 哪個更快?插入或更新?
- 8. 哪個更快?
- 9. 哪個插入更快,XML字段或Varchar(max)字段?
- 10. 哪個更快?
- 11. 。哪個更快?
- 12. 哪個更快?
- 13. 哪個更快?
- 14. 哪個更快/更好:哪裏更新或合併?
- 15. 哪個布爾更快? <或<=
- 16. 哪個更快:Intent.putExtra或SQLite查詢?
- 17. 哪一個更快,getimeofday或clock_gettime?
- 18. 哪個更快:計算或分配
- 19. 哪個更快$ variable []或array_push($ variable,$ newValue)?
- 20. Java:哪個更快,數組或對象?
- 21. OpenGL:哪個更快 - GL_POLYGON或GL_TRIANGLE_FAN?
- 22. 哪個更快s + ='a'或s = s +'a'python
- 23. 哪一個更快,C#或Vb.net?
- 24. 哪個更快,redis LPUSH或RPUSH?
- 25. charAt()或子字符串?哪個更快?
- 26. 哪一個更快? Swift的.filter或NSPredicate?
- 27. Java Set - 哪個更快Set.add()或Set.addAll()?
- 28. 哪個更快:ldc.i4/ldstr或ldloc?
- 29. 哪個更快合併或ISNULL?
- 30. 哪個更快的asp.net mvc json或json.net?
謝謝你問這個問題的人......只因爲我喜歡比較兩個......大多數人可能會說它根據個人情況而有所不同... – LorenVS 2009-12-11 09:56:19
它根據個人情況而有所不同... – 2009-12-13 21:04:40