【问题标题】:Entity Framework 4.0 with Sql Compact Edition 4.0 performance issueEntity Framework 4.0 with Sql Compact Edition 4.0 性能问题
【发布时间】:2011-04-08 22:19:12
【问题描述】:

我有一个带有 EF 模型的 Web 应用程序,它最初是使用 SQL Server 2008 后端设计的。后来,为了可移植性,我决定使用 SQL CE,因此我将模型转换为面向 Sql CE 4.0。但是,在运行此应用程序时,我遇到了严重的性能问题。

例如,我在代码中有一部分从数据库中检索实体:

        Trace.Write("Retrieving node from database", "Application");
        var name = value.ToString();
        var node = DataContext.Entities.Nodes
            .SingleOrDefault(n => n.Name == name);
        Trace.Write("Node retrieved from database ", "Application");

当我查看跟踪信息 (trace.axd) 时,这些代码行耗时 0.6 秒!!

跟踪信息

Category       Message                         From First(s)    From Last(s)
Application Retrieving node from database   0.00057591118424269 0.000576
Application Node retrieved from database    0.595122564460008   0.594547

这发生在我按名称查询的应用程序中的任何地方。

有什么想法吗?我猜我必须在列上定义一个索引,但我将如何在 EF 模型中做到这一点?

编辑:语法 编辑 2: 标题中的拼写

【问题讨论】:

    标签: entity-framework-4 sql-server-ce


    【解决方案1】:

    【讨论】:

    • 如果有人偶然发现这一点,@ErikEJ 将connection.Open() 添加到Application_Start() 的建议很有帮助!最后,我添加了一个条件来检查应用程序是否正在使用 SqlCe:` if (((EntityConnection)DataContext.Entities.Connection).StoreConnection.GetType().Name == "SqlCeConnection") DataContext.Entities.Connection.Open( );`
    • 我遇到了同样的问题,connection.Open() 助手解决了这个问题。
    【解决方案2】:

    我过去使用过旧版本的 SQL CE,我发现一个主要瓶颈是打开连接。

    您可以尝试自己管理打开的连接,并手动将其传递到数据上下文中(而不是让上下文自动管理连接。)

    【讨论】:

    • 嗯,有趣...现在,我目前的意图是允许此应用程序随时切换到 SQL Server(通过更改连接字符串)。在这种情况下,应用程序会受到怎样的影响?
    • 您只需要确保在打开与其他来源的新连接之前关闭所有打开的连接。
    猜你喜欢
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多