それは再利用ADO.NETのコマンドオブジェクトには良いアイデアですか?
-
20-09-2019 - |
質問
私は、データベースに対して任意のスクリプトを実行し、.NETプログラムに取り組んでいます。
colleageは、データベース・アクセス・コードを書き始めたときは、、彼は単に各ステートメントのために再利用されるアプリケーションの残りの部分(CommandText
などを呼び出し、Type
/ ExecuteNonQuery()
設定)に1つのコマンドオブジェクトを公開します。
私は、彼らがその都度新たに解析されているので、これは、繰り返し、同じ文に対する大きなパフォーマンスヒットで想像します。
私は疑問を抱いていますが、しかし、である:各ステートメントが前の(だけではなく、異なるパラメータが、全く別の声明)と異なっている場合、これはまた、実行速度が低下しますか?私は簡単に文書でその上で答えを見つけることができませんでした。
ところで、使用RDBMSは、Oracleですが、私はこの質問は実際にデータベース固有のものではないと思います。
P.S。私は、同じCommand
オブジェクトはスレッドセーフではないさらすことを知っているが、それはここでの問題はありません。
解決
は新しいコマンドオブジェクトの作成にかかわるいくつかのオーバーヘッドがあり、そのため特定の状況では、それを再使用するのと同じコマンドに意味をなすことができます。しかし、アプリケーション全体のために強制一般的なケースとして、それは少し奇妙以上のようです。
他のヒント
パフォーマンスヒットは通常、データベースへの接続を確立するから来ているが、ADO.NETはここに助けるために、接続プールを作成します。
あなたがするたびに新たに解析文を避けたい場合は、ストアドプロシージャにそれらを置くことができます。
私はあなたの同僚は、ちょうど彼が違いを生むことがなかったコマンドオブジェクトを再利用する場所、他のプラットフォームに取り組んでから継承されますことを、いくつかの古いスタイルのアプローチを使用しています想像します。