在.NET Core中运行代码以连接到SQL Server数据库似乎比在完整的.NET Framework中慢得多。是这样吗还是我做错了什么?
我的PC上装有SQL Server 2017,并且想要运行一个简单的存储过程,例如
CREATE PROCEDURE OneRowSelect
AS
BEGIN
SELECT 1
END
GO
我使用SQL Client 4.6.0连接到数据库,并在我的代码中获得此过程的结果。所以我写了一个.Net Standard 2.0库,提供了以下代码:
private const string connectionString = @"data source=.;initial catalog=TestDB;Integrated Security=SSPI;";
private const string command = @"OneRowSelect";
public static async System.Threading.Tasks.Task Execute()
{
using (SqlConnection con = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand(command, con)
{
CommandType = CommandType.StoredProcedure
})
{
con.Open();
var data = await cmd.ExecuteReaderAsync();
while (data.Read())
{
var res = data[0];
}
}
}
}
最后,我在.NET Core 2.2和.NET Framework 4.7.2中编写了两个项目,并在这两个项目中引用了该.NET Standard库,并使用Execute
记录了Stopwatch
函数的执行时间。
我在这两个项目中的代码是:
Stopwatch stopwatch = Stopwatch.StartNew();
for (int i = 0; i < repeat; i++)
await Runner.Execute();
stopwatch.Stop();
结果令人难以置信。在我的系统中,.NET Core比.NET Framework慢得多。结果是:
是我错了还是.NET Core比.NET Framework慢得多?