我知道,我今晚正处于提问模式,
我正在构建桌面应用程序。幸运的是,我选择了一个开放式架构,因为我遇到了以下问题:
我的应用程序允许用户添加操作。在我的测试中,我只添加了易于管理的小型(测试)操作。每个操作都添加到一个数据存储区,该数据存储区当前是一个SQL CE 4.0数据库(首先使用EF 4.1代码访问,这很棒)。
现在我使用更大的常用操作(数据库中大约4000行)测试应用程序。而不是花几秒钟,插入实际需要几分钟!在大表中,只有一个外键,当然只有主键,但似乎4000行对它来说太多了。
所有行都以1批方式插入,而真正的性能缺失在SaveChanges命令上。
我对使用手动查询(没有测试过)感到满意,但这不是首选选项,因为事务不受支持且必须是隔离操作。
那么,我需要一个新策略吗?在SQL Server 2008上,您可以执行批量插入,但Sql Server CE也不支持。
哪些客户端解决方案与SQL Server CE一样灵活且轻量级? (例如Ofcourse我不希望用户安装SQL Server,也不想使用某些本机组件)。
我可以在某些形式中使用序列化,但这感觉就像重新发明轮子并且有很多工作(升级,完整性,多线程访问等)。
提前致谢!
答案 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模型中。一旦我找到了最好的解决方案,我会在这里发布。
很快就会被关注......