У меня есть веб-сервис, поэтому обработчик вызывается несколько раз одновременно.
Внутри я создаю 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 мс!
Я просто не могу понять, где исследовать проблему.