XSL スタイル シートを使用して並べ替えを行っていましたが、非常に遅いようです。より効率的な方法はありますか?
これはノードのフラット リストです。ノードをオブジェクトに変換し、GenericList で並べ替えると役立ちますか?
編集最終結果が XML である必要はありません。
XSL スタイル シートを使用して並べ替えを行っていましたが、非常に遅いようです。より効率的な方法はありますか?
これはノードのフラット リストです。ノードをオブジェクトに変換し、GenericList で並べ替えると役立ちますか?
編集最終結果が XML である必要はありません。
XslCompiledTransform を使用して xsl で実行しますが、コンパイルが遅く、実行が非常に高速であるため、必ず XslCompiledTransform をキャッシュしてください。
そう:
これは非常に高速で、コードをクリーンに保ち、並べ替えの実装を変更する際に柔軟に対応できます。単一の xsl を編集するだけです。
確認せずに書いているので誤字脱字があるかもしれませんが、こんな感じです。
XslCompiledTransform xsl = (XslCompiledTransform)HttpRuntime.Cache.Get("my_xsl");
if (xsl == null)
{
string fileName = "path/to/your/xslfile.xsl";
xsl = new XslCompiledTransform();
xsl.Load(fileName);
HttpRuntime.Cache.Insert("my_xsl", xsl, new CacheDependency(new string[]{fileName}));
}
そして変換するには、次のようなメソッドを使用します。
public static XmlNode TransformToXml(IXPathNavigable xml, XslCompiledTransform xsl, XsltArgumentList arguments, XmlWriterSettings settings)
{
XmlDocument output = new XmlDocument();
using (XmlWriter writer = XmlWriter.Create(output.CreateNavigator().AppendChild()))
{
xsl.Transform(xml, arguments, writer);
}
return output;
}
ノードを選択する非効率的な方法 (//node.
私の経験では、XSL は最適な方法の 1 つですが、大きな入力ファイルを扱うようになると、全体的な速度は少し不安定になります。
独自の並べ替えを行うこともできますが、正直なところ、それよりも速くなるとは思いません。
私が考えることができる他の唯一の可能なオプションは、データビューまたは何かにロードしてそこでソートし、XMLに戻すことですが、それは間違った方法のようです.
編集-追加された情報に基づいて、はい、リストへのロードがはるかに高速になると確信しています....再確認するために試してみる必要がありますが、とにかく別の形式で必要な場合は、そうかもしれません。