У меня есть веб-сервис, поэтому обработчик вызывается несколько раз одновременно.
Внутри я создаю SqlConnection и SqlCommand. Я должен выполнить около 7 различных команд. Для разных команд требуются различные параметры, поэтому я просто добавляю их один раз:
command.Parameters.Add(new SqlParameter("@UserID", userID));
command.Parameters.Add(new SqlParameter("@AppID", appID));
command.Parameters.Add(new SqlParameter("@SID", SIDInt));
command.Parameters.Add(new SqlParameter("@Day", timestamp.Date));
command.Parameters.Add(new SqlParameter("@TS", timestamp));
Затем во время выполнения я просто изменяю правомочность CommandText, а затем вызываю ExecuteNonQuery(); или ExecuteScalar();
И я столкнулся с проблемой производительности. Например, небольшие отладки и профилирования показывают, что команда
command.CommandText = "SELECT LastShowTS FROM LogForAllTime WHERE UserID = @UserID";
занимает около 50 мс. Если я изменю его на:
command.CommandText = "SELECT LastShowTS FROM LogForAllTime WHERE UserID = '" + userID.Replace("\'", "") + "'";
тогда он занимает всего 1 мс в avarage!
Я просто не могу понять, где искать проблему.