최근 SqlDataReader와 함께 sqlcmd 명령 줄 유틸리티를 사용하는 일부 C# 코드를 대체 할 것을 동료에게 맹세했습니다. 이전 코드에서는 다음을 사용합니다. System.Diagnostics.ProcessStartInfo procStartInfo = 새 System.Diagnostics.ProcessStartInfo ("cmd", "/ c"+ sqlCmd); wher sqlCmd는 다음과 같습니다 "sqlcmd -S"+ serverName + "-y 0 -h-1 -Q"+ "\" "+"USE [ "+ database +"] "+"; + txtQuery.Text + 그 결과는 정규 표현식을 사용하여 구문 분석됩니다. SQLDataReader를 사용하면 업계 관행에 더 부합하고, 디버그 및 유지 관리가 쉬우 며, 빠를 것입니다. 그러나 SQLDataReader 접근 방식은 적어도 . 같은 속도는 꽤 가능성이 느린 내가 SqlDataReader를 제대로 모든 것을하고 있어요 믿는 코드는 다음과 같습니다.SQLDataReader는 명령 줄 유틸리티 sqlcmd를 사용하는 것보다 속도가 느립니까?
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는 OLE DB 기술을 사용하여 데이터베이스를 조회합니다. ADO.NET보다 빠릅니다. 특히 커맨드 라인 유틸리티 접근법은 프로세스를 시작하기 때문에 정말 놀랍습니다. 나는 그것이 정말로 느릴 것이라고 생각했다.
의견이 있으십니까?
덕분에, 데이브
'// 읽는 사람이 많다 '는 것이 중요 할 수 있습니다. 거기에 뭐가 들어 있니? –
20-40 %가 중요합니까? 한 번의 작업으로 500ms, 다른 작업에서 600ms가 소요되는 프로세스에 대해 이야기하고 있습니까? 또는 몇 초 또는 그 이상입니까? –
샘, 350 대 600의 차이 (누가 테스트를하고 있는지에 따라 다르다.) 나는 인간이 200 밀리 초 미만을 인식 할 수 없으므로 약간의 우려가 있다는 것을 읽는다 고 믿는다. 이 데이터는 사용자가 "결과 표시"버튼을 클릭 할 때까지 기다려야합니다. 그 전에는 데이터를 가져올 수 없으므로 마지막 순간까지 데이터를 가져올 수 없으므로 솔직히 SQLDataReader가 빠르거나 빠르다고 놀랍습니다. , TimLi의 대답 (DataReader도 스키마 정보를 얻음)을 참조하십시오. do stuff/w reader는 매우 빠릅니다 (<15 밀리 초). Thanks – Dave