2012-02-02 8 views
1

私は次のクエリがありますLINQ to XMLクエリの速度と大規模なXML文字列のRegex?

Dim elementsWithPossibleCCNumbers As IEnumerable(Of XElement) = 
xmlTree.Descendants(). 
Where(Function(element) element.Attributes(). 
Where(Function(attribute) attribute.Value.Length >= 13 
          AndAlso attribute.Value.Length <=  
16). 
Where(Function(attribute) Long.TryParse(attribute.Value, numeric)).Count() = 1).  
[Select](Function(x) x) 

を私はもともと正規表現を使用して属性を探していたが、私はどこへ行くか、より良いルートである私に言ってコミュニティの他のいくつかのためにXMLにLINQを使用して開始しました。私の唯一の関心事は、大きなXML文字列の場合、LINQ to XMLクエリのパフォーマンスはどのくらいで、Regexよりも高速ですか?

クエリの速度を向上させることはできますか?

+0

測定しましたか?あなたのXMLはどれくらいの大きさで、どれくらいの速さが必要ですか?正しい、堅牢なコードを作成する可能性は、正規表現とLINQ to XMLの違いは何だと思いますか? –

+0

@JonSkeet - それは変わるので、私は実際に明確なサイズを持っていませんが、最大のものは29,123文字または1332ワードです。高速化する必要はありませんが、XMLリクエストがWebサービスにヒットするたびにこのメソッドがヒットしますので、私は興味があります。私はそれをまだベンチマークする機会を得られなかった。 – Xaisoft

+0

あなたの優先順位が間違っているように聞こえます。あなたが信頼できる最も簡単なコードを書き、それをベンチマークし、それが十分でない場合はパフォーマンスについて心配してください。 –

答えて

4

regexpは基本的にXMLファイルを処理するための間違ったツールです。たとえば、CDATAセクションを追加するなど、間違った結果を返すように正規表現を欺くのは簡単です。そのスピードはこれまでのところ二次的な問題です。コーナーケースを正しく処理するだけでなく、XMLが正規表現で整形式であるかどうかを知ることさえ不可能です。

質問に答えるために、スピードは正規表現の構造に大きく依存します。 regexpの方が高速なファイル/ regexpの組み合わせと、LINQ2XMLの方が速いfile/regexpの組を構築することは可能です。しかし、LINQ2XMLは依然としてかなり速く、より正確になるでしょう。

+0

正確には、私は正規表現を使っていましたが、コーナーケースがたくさんあったので、LINQ2XMLを先に進めました。 – Xaisoft

+0

ベンチマークのためのhttp://blog.dreamlabsolutions.com/post/2008/12/04/LINQ-to-XML-and-LINQ-to-XML-with-XPath-performance-review.aspxの有効なlinq結果? – Xaisoft

+0

@ XaisoftブログでLINQ2XMLとLINQ2XML(XPath付き)を比較しているところで、XPathが大きく減速していると正しく判断しています。あなたが3年前に持っていたものよりも速いCPUを使うことで、より良い結果を得ることができるので、生の速度はほとんど問題ではありません。 – dasblinkenlight