EF 4.1 Sql CE性能问题

时间:2011-04-13 19:53:39

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

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

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

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

现在我使用更大的常用操作(数据库中大约4000行)测试应用程序。而不是花几秒钟,插入实际需要几分钟!在大表中,只有一个外键,当然只有主键,但似乎4000行对它来说太多了。

所有行都以1批方式插入,而真正的性能缺失在SaveChanges命令上。

我对使用手动查询(没有测试过)感到满意,但这不是首选选项,因为事务不受支持且必须是隔离操作。

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

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

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

提前致谢!

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

并非具体解决您的问题,但这些技巧可以帮助您解决问题。

答案 2 :(得分:0)

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

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

很快就会被关注......