2011-07-21 9 views
0

私はXSLT1を使用するリアルタイムアプリケーションを持っており、XSLT2にアップグレードしたいと考えています。 現在、私は0.1秒以内に特定のxmlとxslを実行するmicrosoft xslt1エンジンを使用しています。XQSharp XSLT2パフォーマンスチューニング

XSLT2変換では、xslt2変換を実行するためにXQSharpを使用する関数を作成しました。私は同じxmlとxslを使い、変換には0.9秒かかりました。

私は私のコードを分析し、それが処理時間のより多くのそして90%がこの行によって引き起こされることが判明:

XSLT = Xslt.Compile(新しいにStringReader(inputXsl)、querySettings)として暗いクエリ

私の質問は、このプロセスをスピードアップする方法がありますか?

たとえば、いくつかのquerySettingsを変更しますか?

私の完全なコード

<WebMethod()> _ 
    Public Function XSLTXQSharp(ByVal inputXml As String, ByVal inputXsl As String) As String 
     Dim nameTable As XmlNameTable = New NameTable() 

     Dim xmlReaderSettings As New XmlReaderSettings() 
     xmlReaderSettings.NameTable = nameTable 

     Dim document As XdmDocument 

     Using reader As New StringReader(inputXml) 
      Using xmlReader As XmlReader = xmlReader.Create(reader, xmlReaderSettings) 
       document = New XdmDocument(xmlReader) 
      End Using 
     End Using 


     Dim querySettings As New XsltSettings(nameTable) 
     querySettings.ContextItemType = XdmType.Node 
     querySettings.ModuleResolver = New XmlUrlResolver() 


     ''' SLOW!!! more then 90 % of execution time 
     Dim query As Xslt = Xslt.Compile(New StringReader(inputXsl), querySettings) 

     Dim contextItem As XPathNavigator = document.CreateNavigator() 
     Dim result As Stream = New MemoryStream() 
     query.ApplyTemplates(contextItem, result) 

     'Return dt2.Subtract(dt1).ToString() 

     result.Position = 0 
     Using reader As StreamReader = New StreamReader(result) 
      Return reader.ReadToEnd() 
     End Using 


    End Function 

答えて

0

あなたは、このいずれかのXQSharpに固有のフォーラムを使用する必要があります。

大規模で複雑なスタイルシートを使用して小さなソース文書を変換する場合ですか?

スタイルシートをコンパイルするコストを償却して、多くの変換で使用するために結果をキャッシュする方法はありませんか?開発者は、コンパイル時にコードを最適化するために費やされる時間が、実行時の実行時間を短縮する場合は十分に費やされていると想定していますが、この作業負荷の記述方法は当てはまりません。

純粋に利己的な観点からは、数字がサクソンとどのように比較されているかを知りたいと思っています。

+0

Saxonとの比較にも興味がありますが、これを行うにはSaxonで同じスタイルシートをコンパイルする際の問題を解決しなければならないので面白いです。サクソンについては、[この質問](http://stackoverflow.com/questions/6772630/getting-detailed-error-description-from-saxon-9-x-in-net)を参照してください。 – MLewi

+0

サクソンは0,45秒で変形を行っています。 – MLewi

+0

saxonにはパフォーマンスに影響を与える設定がありますか? – MLewi

1

最適化レベルを変更してみてください。静的コンテキスト設定のプロパティです。コンパイルしようとしている変換を確認すると便利です。

Microsoftコンパイラは非常に高速で、バイトコードにコンパイルすることに注意してください。 XQSharpは、より複雑なスタイルシートや、XSLT 1.0のキーの使用をXSLT 2.0の機能(例えばfor-each-group)で置き換えている傾向があります。

+0

querySettings.OptimizationLevel = OptimizationLevel.Local/Noneを設定すると、avarage 0.6秒の最善の結果が得られました。 – MLewi

関連する問題