C# .Net CF SqlCeDataAdapter 数据集填充很慢
Posted
技术标签:
【中文标题】C# .Net CF SqlCeDataAdapter 数据集填充很慢【英文标题】:C# .Net CF SqlCeDataAdapter DataSet Fill is slow 【发布时间】:2012-02-21 10:42:00 【问题描述】:我在 Compact Framework 应用程序(SQLServer Compact Edition 数据库)中的数据库性能方面遇到了一点问题。
我做的是:
使用 SqlCeDataAdapter 在数据库中查询一些数据,作为回报,我得到 6 行数据
sqlCeDataAdapter = new SqlCeDataAdapter(query, Sql_Connection);
然后我使用 SqlCeDataAdapter 填充方法用数据填充数据集。
sqlCeDataAdapter.Fill(resultSet);
循环数据集..
当我有 300 行数据时,整个函数的执行时间不到一秒,但如果我有大约 10 000 行数据,则大约需要 6-7 秒(这在我的应用程序中太多了)。
在这两种情况下,它都会返回完全相同的行,但填充方法会减慢它的速度……
调用fill方法时是否先查询数据库?
除了减少行数之外,我还能做些什么吗?
另外,如果我更改查询以使数据库返回 0 行,它仍然需要相同的时间......
最好的问候
埃德蒙
【问题讨论】:
发布您的实际代码... 实际查询是什么样的?目标表的索引是否正确? 7 秒表示我们没有看到一些错误(尽管我同意 ErikEJ 放弃 DataSet 的建议)。 【参考方案1】:建议您避免在 .NET CF 上使用 DataSet,因为它会消耗太多内存,并且实际上会将数据库复制到 RAM 中。如果需要数据绑定,请使用 SqlCeResultSet,否则只需使用 SqlCeDataReader
【讨论】:
嗨,埃里克!感谢您的回答...好吧,我也一直在尝试 SqlCeDataReader,但它仍然很慢(6-7)。唯一更好的是当查询没有返回任何行时没有延迟...... // Edmund 您还可以使用 .Seek 和 .TableDirect 调查绕过查询处理器以获得最大速度【参考方案2】:谢谢大家的帮助...
我发现了问题,表根本没有索引...
应该是,但数据库的创建者错过了它。
现在一切都运行得很快(也改为 SqlCeDataReader 而不是数据集)。
再次感谢 ErikEJ 和 ctacke...
/埃德蒙
【讨论】:
以上是关于C# .Net CF SqlCeDataAdapter 数据集填充很慢的主要内容,如果未能解决你的问题,请参考以下文章
如何在 c# .net CF 3.5 中使用 XmlDocument 向 xml 添加属性
.NET 3.5CF WebRequest 到 Slim 框架