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 框架

C# CF2.0 - System.Activator 和内部类

C# - 在项目之间共享资源文件

在 CF.NET 2.0 中播放 WMA 文件

.Net CF 初始化错误