【问题标题】:EF 4.1 Sql CE Performance problemsEF 4.1 Sql CE 性能问题
【发布时间】:2011-04-13 19:53:39
【问题描述】:

我知道,我今晚处于提问模式,

我正在构建一个桌面应用程序。幸运的是我选择了一个开放的架构,因为我遇到了以下问题:

我的应用程序允许用户添加操作。在我的测试中,我只添加了易于管理的小(测试)操作。每个操作都被添加到当前是 SQL CE 4.0 数据库的数据存储中(首先使用 EF 4.1 代码访问,这很棒)。

现在我使用更大的通用操作(数据库中大约 4000 行)测试了应用程序。插入实际上需要几分钟,而不是花费几秒钟!在大表中,只有1个外键,当然还有主键,但看起来4000行就够了。

所有行都分批插入,真正的性能不足在于 SaveChanges 命令。

我对使用手动查询感到不满(还没有测试过),但这不是首选选项,因为不支持事务并且它必须是一个独立的操作。

那么,我需要一个新的策略吗?在 SQL Server 2008 上,您可以进行批量插入,但显然 Sql Server CE 也不支持。

哪些客户端解决方案与 SQL Server CE 一样灵活且轻量级? (例如,我当然不希望用户安装 SQL Server,也不希望使用某些本地组件)。

我可以以某些形式使用序列化,但这感觉像是在重新发明轮子,而且工作量很大(升级、完整性、多线程访问等)。

提前致谢!

【问题讨论】:

  • 您要插入的表上是否有很多索引,或者有很多连接? 4000 行似乎非常小,插入需要几分钟。
  • 不,没有索引,只有 1 个外键和 1 个主键。事实上,只有 4 列是 4 个整数
  • 一个问题是我没有智能跟踪并且不能真正看到 SaveChanges 中发生了什么。我只是看到那里消耗了时间,而且只有大量数据

标签: c# entity-framework-4.1 sql-server-ce


【解决方案1】:

问题是 SQL CE 上的插入操作通常有多慢? EF 的问题在于它不请求一批插入 4.000 条记录,而是一条一条地插入记录。当前的 EF 版本不支持命令批处理,因此您在序列中执行 4.000 次插入。这在大型 SQL Server 上也是一个问题,但通常更快。我能够在速度较慢的桌面上的六分钟内和服务器上的三分钟内向 SQL Server 插入大约 50.000 - 100.000 条更复杂的记录。

【讨论】:

    【解决方案2】:

    http://msdn.microsoft.com/en-us/magazine/gg490349.aspx

    不是专门针对您的问题的答案,但这些技术将帮助您解决查询问题。

    【讨论】:

      【解决方案3】:

      两个答案都有帮助,但没有提供解决方案。

      我发现了这个:http://sqlcebulkcopy.codeplex.com/,它提供了一个 SqlCeBulkCopy 类,它可以在 2 秒内工作并执行插入!我现在正在努力将它集成到我当前的存储库和 unitofwork 模型中。一旦我找到了最好的解决方案,我就会把它贴在这里。

      即将跟进...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-14
        • 2011-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多