Wykonuję tę samą metodę (która zwraca liczbę rekordów w tabeli, w tabeli jest nieco ponad 900k rekordów) 2 razy i zawsze czas wykonywania się ich jest różny. Pierwsza metoda wykonuje się kilkanaście/kilkadziesiąt razy dłużej od drugiej (np. 2331 ms i 90 ms). Dlaczego tak się dzieje? W przypadku np. wyciągania wszystkich rekordów z tabeli, różnica czasu jest już niewielka i liczy do około 10%.
static System.Diagnostics.Stopwatch watch;
static void Main(string[] args)
{
watch = System.Diagnostics.Stopwatch.StartNew();
new ExperimentalTableDb().GetCount();
watch.Stop();
Console.WriteLine(watch.ElapsedMilliseconds);
watch = System.Diagnostics.Stopwatch.StartNew();
new ExperimentalTableDb().GetCount();
watch.Stop();
Console.WriteLine(watch.ElapsedMilliseconds);
}
public class ExperimentalTableDb
{
public int GetCount()
{
return Convert.ToInt32(GetExecuteScalar("SELECT COUNT(*) FROM dbo.ExperimentalTable"));
}
protected object GetExecuteScalar(string queryString, params KeyValuePair<string, object>[] parameters)
{
using (SqlConnection conn = new SqlConnection(ConnectionString))
using (SqlCommand cmd = new SqlCommand(queryString, conn))
{
foreach (var parameter in parameters)
{
cmd.Parameters.AddWithValue(parameter.Key, parameter.Value);
}
conn.Open();
return cmd.ExecuteScalar();
}
}
}