низкая производительность с параметром sql

У меня есть веб-служба, поэтому обработчик все время вызывается несколько раз одновременно.

Внутри я создаю 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 мс!

Я просто не могу понять, где исследовать проблему.

9
задан Scott Boettger 21 December 2011 в 13:18
поделиться