Ho un servizio Web, quindi il gestore viene chiamato più volte contemporaneamente in modo continuo.prestazioni scarse con sqlparameter
All'interno creo SqlConnection e SqlCommand. Devo eseguire circa 7 diversi comandi. Diversi comandi richiedono vari parametri, quindi è sufficiente aggiungere una volta:
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));
Poi durante l'esecuzione mi basta cambiare CommandText prorerty e quindi chiamare ExecuteNonQuery(); o ExecuteScalar();
E ho riscontrato problemi di prestazioni. Per esempio debuggin e profilatura piccoli spettacoli, detto ordine
command.CommandText = "SELECT LastShowTS FROM LogForAllTime WHERE UserID = @UserID";
prende circa 50ms in avarage. Se lo cambio a:
command.CommandText = "SELECT LastShowTS FROM LogForAllTime WHERE UserID = '" + userID.Replace("\'", "") + "'";
allora ci vogliono solo 1ms in fuochi d'artificio!
Non riesco proprio a capire dove indagare il problema.
Puoi indicare: qual è il tipo definito di 'userID' nel C# e qual è il tipo definito della colonna' UserID' nel database? –
Sei sicuro che questo è il collo di bottiglia delle tue prestazioni? Hai profilato tutto? – asawyer
userID è una stringa, in DB è varchar (20) ed è un PK –