关于 Entity Framework 4.0 的性能问题

发布于 2024-10-19 20:29:25 字数 965 浏览 2 评论 0原文

我们即将使用 EF 4.0 版本,我做了一些性能测试。测试并与EF 3.5版本进行比较,我发现了一些有趣的事情。

测试方法: 我开发了一个简单的 ASP.NET 网站,它有一个按钮和 Gridview 控件,单击按钮我会填充网格。我已经复制了填充数据网格的代码:

private void BindData()
{
    using (NorthwindEntities context = new NorthwindEntities())
    {
        DataGrid.DataSource = context.Categories;
        DataGrid.DataBind();
    }
}

我在这个网页上运行了负载测试,测试模式是这样的—— 初始用户数 = 30,每 10 秒将用户数增加 10,最大用户数 = 250,[我运行此测试 5 分钟]。我对使用 EF 3.5 版本的网站和使用 EF 4.0 的网站运行了此测试,观察结果很有趣...

  1. 5 分钟内处理的请求总数(测试代理发送的 Web 请求)在 EF 3.5 版本中始终较多(尽管增量非常小)。

  2. EF 4.0 版本网站中的 CLR 争用率非常高(与 3.5 EF 版本网站相比),只是想知道 EF 4.0 中是否包含更多锁定。

另外,最好知道:

  1. EF 4.0 版本中是否有任何性能增强?

  2. 我想知道 EF 团队是否有关于如何在 Web 应用程序上下文中使用 EF 的任何指导(特别是如何使用 ObjectContext,是否在 Web 会话之间共享单例 ObjectContext 或让每个会话有自己的 ObjectContext,或者让每个请求创建和销毁 ObjectContext (正如我在性能测试中所做的那样)。

We are about to use EF 4.0 version, I did some perf. test and compared with EF 3.5 version, I found something interesting.

Test methodology:
I have developed a simple ASP.NET website which is having a button and Gridview control, clicking on the Button I populate the grid. I have copied the code of populating the Data grid:

private void BindData()
{
    using (NorthwindEntities context = new NorthwindEntities())
    {
        DataGrid.DataSource = context.Categories;
        DataGrid.DataBind();
    }
}

I ran Load-test on this web page, the test pattern is like this --
Initial user count = 30, Increment user count by 10 in every 10 second, Max user count = 250, [ I ran this test for 5 minutes ]. I ran this test for the website which is using EF 3.5 version and also the website which is using EF 4.0, the observations are interesting...

  1. Total number of request (web request sent by the Test agent) processed within 5 minutes is always more in EF 3.5 version (though the delta is very less).

  2. The CLR contention rate is very high in EF 4.0 version website (compare to the 3.5 EF version website), just curious to know whether more Locking included in EF 4.0.

Also it would be good to know:

  1. Is there any performance enhancement done in EF 4.0 version?

  2. I was wondering whether any guidance from EF team on how to use EF with web app context (especially how to use the ObjectContext, whether to share a singleton ObjectContext among the web sessions or let every session have its own ObjectContext, or let every request create and destroy the ObjectContext (as I have done in my perf. test).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

独自唱情﹋歌 2024-10-26 20:29:25

是的,EF4 中进行了性能增强。您可能不会在执行的简单查询中看到它们:

 SELECT * FROM dbo.Categories

但是一旦您开始在现实场景中使用 EF,您就会发现 EF4 更好更快。即使 EF4 在某些情况下稍微慢一点,您仍然会希望使用 EF4,因为它具有复杂的功能集、POCO 支持等。

ObjectContext 的生命周期应该很短。在 Web 应用程序中,最好每个请求使用一个 ObjectContext 实例。

EFv1 已死。除非必须使用 .NET 3.5,否则不要使用 EFv1。

Yes there are performance enhancements done in EF4. You will probably not see them in simple query you executed:

 SELECT * FROM dbo.Categories

But once you will start to use EF in real world scenarios you will find EF4 better and faster. Even if EF4 is little bit slower in some scenarios you will still want to use EF4 because of much complex feature set, POCO support etc.

Life time of ObjectContext should be short. In web application it is best to use one ObjectContext instance per request.

EFv1 is dead. Unless you must use .NET 3.5 don't use EFv1.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文