【发布时间】:2009-11-25 21:41:28
【问题描述】:
呵呵。
我只是想通过使用存储过程来提高我的应用程序(.NET 3.5、C#)的性能。
所以我写了一个小测试应用程序来看看这些与看起来像这样的普通查询相比有多快:
private static long _StartStored;
private static long _EndStored;
private static long _StartNormal;
private static long _EndNormal;
private static TimeSpan _StoredTime;
private static TimeSpan _NormalTime;
private static string[] _Stored = new string[102000];
private static string[] _Normal = new string[102000];
static void Main(string[] args)
{
Console.WriteLine("Querying 2000 normal queries");
_SQLConnection = new SqlConnection(/*my_connection*/);
_SQLConnection.Open();
_StartNormal = DateTime.Now.Ticks;
for (int i = 100000; i <= 102000; i++)
{
DataTable _ResultDataTable = new DataTable();
SqlDataAdapter _SQLAdapter = new SqlDataAdapter(/*my_query*/, _SQLConnection);
_SQLAdapter.Fill(_ResultDataTable);
if (_ResultDataTable.Rows.Count > 0)
_Normal[i] = _ResultDataTable.Rows[0]["row"].ToString();
}
_EndNormal = DateTime.Now.Ticks;
_NormalTime = TimeSpan.FromTicks(_EndNormal - _StartNormal);
Console.WriteLine("Total execution time: " + _NormalTime.ToString());
//-----------------------------------------------------------------------------
Console.WriteLine("Querying 2000 stored procedures");
_StartStored = DateTime.Now.Ticks;
SqlCommand _Cmd = new SqlCommand(/*my_sp*/, _SQLConnection);
_Cmd.CommandType = CommandType.StoredProcedure;
SqlParameter _Param = new SqlParameter("@param1", 0);
_Cmd.Parameters.Add(_Param);
for (int i = 100000; i <= 102000; i++)
{
_Cmd.Parameters["@param1"].Value = i;
SqlDataReader _Reader = _Cmd.ExecuteReader();
while (_Reader.Read())
{
_Stored[i] = _Reader["StartWork"].ToString();
}
_Reader.Close();
}
_EndStored = DateTime.Now.Ticks;
_StoredTime = TimeSpan.FromTicks(_EndStored - _StartStored);
Console.WriteLine("Total execution time: " + _StoredTime.ToString());
我很想缩短那段代码,但是……不行:D
TL;DR - 相同查询的 2000 个存储过程只快了大约 4 秒,这对我来说似乎很低?
我使用的存储过程错了吗?
【问题讨论】:
-
这取决于整个过程需要多长时间。如果第一个用了 5s,第二个用了 1s,那我会说这是一个很大的进步!
-
我知道这是测试代码,但
SqlDataReader、SqlConnection和SqlCommand都实现了IDisposable,应该在某个时候被处理掉。 -
测试过程大约需要 30 秒,但最终应用程序将执行大约 10.000 次此类查询
标签: c# sql stored-procedures