2011-06-28 3 views
2

エンタープライズライブラリのコードを読んでいるうちに、「パラメータキャッシング」というテクニックを使用していることがわかりました。ADO.NETでのパラメータキャッシュのパフォーマンスはどのように向上しますか?

パフォーマンスがどのように改善され、どのようなシナリオが役立つか説明できますか?

純粋にDbParameterオブジェクトの作成コストからパフォーマンスが得られているのですか、またはSQL Server側でクエリプランに関して何か他に何か起こっていますか?

初めてDbCommandオブジェクトをアセンブルし、対応するDbParameterオブジェクトでワイヤリングすると、SQL Serverはこの時点で実行計画をキャッシュし、その後同じパラメータを使用して同じプロシージャを呼び出すと思いますテンプレートはサーバー上の既存のキャッシュされた実行計画を再利用するでしょうか?

答えて

1

私はそれがSqlCommandBuilder.DeriveParametersを呼び出すときに発生したデータベース・ラウンドトリップを回避するために、純粋だと思う:

パラメータ情報が事前に を知られている場合は、設定情報 ことにより、パラメータコレクションを移入 に、より効率的です明示的に。

+0

残念ですが、DeriveParametersはいつ呼び出されますか? – manning18

+0

クラスのデータベースファミリには、ストアドプロシージャの 'DiscoverParameters'を可能にするメソッドがあります。これは、CRUDストアドプロシージャのパラメータにクラスのデータメンバーを動的にマップするような操作を行うデータアクセスレイヤーや、データを入力する必要がないようにするために使用できます。 –

+0

パラメータキャッシングは、日々のADO.NETの使用に何らかの利点を追加しますか?たとえば、DbCommand.CommandType = StoredProcedureを設定し、格納されているproc名を指定してParametersコレクションに追加しますか?ストアドプロシージャのパラメータを事前に知っていたら、DiscoverParametersはいつ呼び出されますか? – manning18

関連する問題