2011-04-13 57 views
0

我知道,我今晚有问题模式,EF 4.1 Sql CE性能问题

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

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

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

将所有行插入到1批次中,并且实际性能缺失位于SaveChanges命令上。

我关于使用手动查询(未经测试)红了,但这不是首选的选项,因为事务不支持,它必须是一个孤立的操作。

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

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

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

提前致谢!

+0

在插入的表格上是否有很多索引,或者是很多连接? 4000行看起来非常小,插入需要几分钟。 – taylonr 2011-04-13 19:57:49

+0

不,没有索引,只有1个外键和1个主键。事实上,只有4列只有4个整数 – Polity 2011-04-13 20:07:42

+0

问题是我没有intellitrace,真的看不到什么在SaveChanges里面。我只是看到时间消耗在那里,只有一大堆数据 – Polity 2011-04-13 20:10:47

回答

0

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

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

很快就要跟着...

0

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