gpt4 book ai didi

entity-framework - Entity Framework 与存储过程 - 性能衡量

转载 作者:行者123 更新时间:2023-12-03 05:44:25 24 4
gpt4 key购买 nike

我正在尝试确定 Entity Framework 比存储过程慢多少。我希望说服我的老板让我们使用 Entity Framework 以方便开发。

问题是我进行了性能测试,看起来 EF 比存储过程慢大约 7 倍。我发现这非常难以置信,我想知道我是否错过了什么。这是一个决定性的测试吗?我可以做些什么来提高 EF 测试的性能吗?

        var queries = 10000;

// Stored Proc Test
Stopwatch spStopwatch = new Stopwatch();
spStopwatch.Start();
for (int i = 0; i < queries; i++ )
{
using (var sqlConn = new SlxDbConnection().Connection)
{
var cmd = new SqlCommand("uspSearchPerformanceTest", sqlConn) { CommandType = CommandType.StoredProcedure };

cmd.Parameters.AddWithValue("@searchText", "gstrader");
sqlConn.Open();
SqlDataReader dr = cmd.ExecuteReader();

List<User> users = new List<User>();
while (dr.Read())
{
users.Add(new User
{
IsAnonymous = Convert.ToBoolean(dr["IsAnonymous"]),
LastActivityDate = Convert.ToDateTime(dr["LastActivityDate"]),
LoweredUserName = dr["LoweredUserName"].ToString(),
MobileAlias = dr["MobileAlias"].ToString(),
UserId = new Guid(dr["UserId"].ToString()),
UserName = (dr["UserName"]).ToString()
});
}

var username = users.First().UserName;
sqlConn.Close();
}
}
spStopwatch.Stop();
Console.WriteLine("SP - {0} Queries took {1}", queries, spStopwatch.ElapsedMilliseconds );

// EF Test
Stopwatch entityStopWatch = new Stopwatch();

var context = new SlxDbContext();
var userSet = context.Set<User>();
entityStopWatch.Start();
for (int i = 0; i < queries; i++)
{
User user = userSet.Where(x => x.UserName == "gstrader").First();
}

entityStopWatch.Stop();
Console.WriteLine("Entity - {0} Queries took {1}", queries, entityStopWatch.ElapsedMilliseconds);

结果:

SP - 10000 个查询耗时 2278

实体 - 10000 次查询耗时 16277

最佳答案

您可以采取一些措施来优化查询。 Here on MSDN您可以找到一个很好的概述。

但说实话,手动映射的存储过程在性能上总是会更快。但问问自己,性能有多重要?在大多数项目中,开发时间比性能更重要。什么更难开发?带解析的原始查询还是 Entity Framework 查询?

ORM 的设计并不是因为它们的性能比手写方法好得多。我们使用它们是因为开发更加容易!

如果您使用 Entity Framework 编写应用程序并将所有查询隐藏在存储库模式后面,您可以快速开发,然后当性能成为问题时,测量您的应用程序以检测瓶颈。那么也许您的某些查询需要优化,可以转移到存储过程和手动映射。

关于entity-framework - Entity Framework 与存储过程 - 性能衡量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9739230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com