2013-05-15 62 views
2

我有我使用的一些轉換成XML新的XML,我再繼續處理下面的VB.NET代碼。 這是一個一次性的過程,不是多次完成的事情,所以沒有效率可以從緩存中獲得,據我所知。XslCompiledTransform從XmlDocument的到的XmlDocument

該代碼有效,但我看到性能問題。 我明白,性能問題可能與XSLT有關。

我還發現具有與XslCompiledTransform的性能問題,尤其是在64位環境中,這可能是一個錯誤的開發實例(http://connect.microsoft.com/VisualStudio/feedback/details/508748

既不可能XSLT的性能問題,也不符合XslCompiledTransform的問題是我的控制之下,但是我的代碼存在問題是可行的。我只是想確保我的轉換方法是我所需要的最有效的方法。

Public Function TransformUsingXPathNavigator(ByVal InputXML As XmlDocument, ByVal XSLTLocation As String) As XmlDocument 

    Dim theNavigator As XPathNavigator 
    theNavigator = InputXML.CreateNavigator() 

    Dim theTransform As XslCompiledTransform = New XslCompiledTransform() 
    theTransform.Load(XSLTLocation) 

    Dim outputXML As New XmlDocument() 

    Using writer As XmlWriter = outputXML.CreateNavigator().AppendChild() 
     theTransform.Transform(theNavigator, writer) 
    End Using 

    Return outputXML 

End Function 

是否有人能夠指出我的代碼的任何問題?

編輯:這是一個一次性的變換,所以沒有循環。

+0

此轉換是否僅發生一次(每個XSLT)或多次?如果此代碼在循環中運行,請嘗試在循環外部創建'XslCompiledTransform'對象並將其傳遞到'XSLTLocation'位置。 Load()方法運行的次數越少越好。 – psmay

回答

0

我們從未能夠使用XslCompiledTransform提高代碼的效率。

我們能夠識別正在運行多次XSLT內循環,並取出時採取60+秒到小於1秒去的代碼。

然而,XSLT是出於我的控制,所以我需要找到一個替代的解決方案。 這並不理想,但我不得不回到過時的XslTransform。

使用的XslTransform代碼在不到1秒的運行,這正是我所需要的。

展望未來,我們將使用需要進行清理整頓的XSLT,但現在使用過時的代碼是解決我的問題。