私の経験では、クエリが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.
}