私の経験では、クエリがSSMSで高速に実行されるが、.NETからは低速になる通常の理由は、接続のSET
の違いによるものです。 -tings。 SSMSまたはSqlConnection
のいずれかによって接続が開かれたとき 、一連のSET
実行環境を設定するためのコマンドが自動的に発行されます。残念ながら、SSMSとSqlConnection
異なるSET
デフォルト。
一般的な違いの1つは、SET ARITHABORT
です。 。 SET ARITHABORT ON
を発行してみてください .NETコードからの最初のコマンドとして。
SQLプロファイラーを使用して、どのSET
を監視できます。 コマンドはSSMSと.NETの両方で発行されるため、他の違いを見つけることができます。
次のコードは、SET
を発行する方法を示しています コマンドですが、このコードはテストされていないことに注意してください。
using (SqlConnection conn = new SqlConnection("<CONNECTION_STRING>")) {
conn.Open();
using (SqlCommand comm = new SqlCommand("SET ARITHABORT ON", conn)) {
comm.ExecuteNonQuery();
}
// Do your own stuff here but you must use the same connection object
// The SET command applies to the connection. Any other connections will not
// be affected, nor will any new connections opened. If you want this applied
// to every connection, you must do it every time one is opened.
}