私は最近、sqlcmdコマンドラインユーティリティを使用するC#コードをSqlDataReaderに置き換えることを同僚に提唱していました。古いコードは次を使用します:System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo( "cmd"、 "/ c" + sqlCmd); whersqlCmdは"sqlcmd-S" + serverName + "-y 0 -h-1 -Q" + "\" "+" USE [" + database +"] "+"; + txtQuery.Text + "\ ""; \
次に、結果は正規表現を使用して解析されます。私は、SQLDataReaderを使用することで、業界の慣行に沿ったものになり、デバッグと保守が容易になり、おそらくより高速になると主張しました。ただし、SQLDataReaderのアプローチは少なくとも同じ速度であり、おそらく低速です。私はSQLDataReaderですべてを正しく行っていると思います。コードは次のとおりです。
using (SqlConnection connection =
new SqlConnection())
{
try
{
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString);
connection.ConnectionString = builder.ToString(); ;
SqlCommand command =
new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
// do stuff w/ reader
reader.Close();
}
catch (Exception ex)
{
outputMessage += (ex.Message);
}
}
System.Diagnostics.Stopwatchを使用して両方のアプローチの時間を計測しましたが、コマンドラインユーティリティ(C#コードから呼び出されます)の方が高速に見えます(20〜40%?)。SqlDataReaderには、同じコードが再度呼び出されたときに高速になるという優れた機能がありますが、このアプリケーションではそれを予期していません。
私はすでにこの問題についていくつかの研究を行っています。コマンドラインユーティリティsqlcmdは、OLEDBテクノロジを使用してデータベースにアクセスすることに注意してください。それはADO.NETよりも高速ですか?特にコマンドラインユーティリティのアプローチにはプロセスの起動が含まれるため、私は本当に驚いています。本当に遅くなると思いました。
何かご意見は?
ありがとう、デイブ