0

私は現在、MSDNの記事「ウォークスルー:IQueryable LInQプロバイダーの作成」を読んでおり、ExpressionVisitorが多く使用されています。ExpressionVisitorは、Visitorパターンを使用して式ツリーをトラバースします。

http://msdn.microsoft.com/en-us/library/bb546158.aspx

このようにエクスプレッションツリーを何度もトラバースすると、パフォーマンスにコストがかかるように思われます。本当?IQueryProviderを作成するときに、これについて心配する必要がありますか?

4

2 に答える 2

1

基本的にはそうです。式ツリーは非常に大きくなる可能性があるため、それらをトラバースし、変更によってコピーが作成される可能性があるため、しばらく時間がかかる場合があります。LINQ to SQLおよびEFは、式ASTを過度に操作するため、SQLServerよりもクライアントで多くのCPUを使用することがよくあります。これは非常に深刻で、プロファイラートレースに頻繁に表示されます。

それが重要であるかどうかは、あなたがそれをしている頻度とあなたのプロバイダーが他に何をしているのかによります。それについて他に何を言うべきかわからない。それ自体で遅いまたは速い操作はありません。それはあなたが必要とするものとあなたがそれを実行する頻度に依存します。

とは言うものの、表現の訪問者はエレガントなパターンであり、彼らの場所を持っています。

于 2013-02-02T22:29:45.273 に答える
0

あまり。訪問者パターンを使用して抽象的な構文ツリーを解析することは、かなり標準的です。通常、IQueryableプロバイダーを作成する場合、式ツリー内の少数のノードの解析に費やす時間は、データのフェッチに費やす時間によって完全に小さくなります。

于 2013-02-02T22:30:50.237 に答える