我们即将使用EF 4.0版本,我做了一些性能。测试和EF 3.5版本相比,我发现了一些有趣的东西。
测试方法 我开发了一个简单的ASP.NET网站,它有一个按钮和Gridview控件,点击Button I填充网格。我复制了填充数据网格的代码:
private void BindData()
{
using (NorthwindEntities context = new NorthwindEntities())
{
DataGrid.DataSource = context.Categories;
DataGrid.DataBind();
}
}
我在这个网页上运行了Load-test,测试模式是这样的 - 初始用户数= 30,每10秒增加一次用户数,最大用户数= 250,[我运行此测试5分钟]。我为使用EF 3.5版本的网站以及使用EF 4.0的网站运行此测试,观察结果很有趣......
在5分钟内处理的请求总数(测试代理发送的Web请求)在EF 3.5版本中总是更多(尽管增量非常少)。
EF 4.0版本网站的CLR争用率非常高(与3.5 EF版网站相比),只是想知道EF 4.0中是否包含更多的锁定。
也很高兴知道:
在EF 4.0版本中是否有任何性能增强?
我想知道EF团队是否有关于如何在网络应用上下文中使用EF的指导(特别是如何使用ObjectContext
,是否在网络会话中共享单个ObjectContext或让每个会话拥有自己的ObjectContext
,或者让每个请求创建并销毁ObjectContext
(正如我在perf。测试中所做的那样)。
答案 0 :(得分:2)
是的,EF4中已经完成了性能增强。您可能不会在执行的简单查询中看到它们:
SELECT * FROM dbo.Categories
但是一旦你开始在现实场景中使用EF,你会发现EF4更好更快。即使EF4在某些情况下稍慢一点,你仍然会想要使用EF4,因为功能设置非常复杂,POCO支持等。
ObjectContext
的续航时间应该很短。在Web应用程序中,最好每个请求使用一个ObjectContext
实例。
EFv1已经死了。除非您必须使用.NET 3.5,否则请勿使用EFv1。