在 Delphi 中,与 Dataset.Next 相比,使用 Dataset.Prior 是否会降低性能?
背景:
我有一个在数据集中搜索特定记录的例程。我从数据集中的最后一条记录开始,然后使用 Dataset.Prior 向后工作,直到找到匹配项。我使用这种从后到前的方法只是因为(在实践中)我正在寻找的记录更有可能接近数据集的末尾,所以在我看来,从后面开始会更快地找到记录。
然而,此逻辑基于 Dataset.Prior 和 Dataset.Next 具有或多或少相同的性能开销的假设。是这样吗?
最佳答案
这在很大程度上取决于数据集及其背后的数据库。有些甚至不支持它(所谓的“单向数据集”)。
您描述的问题听起来需要更专业的查询,而不是您当前的解决方案。如果您可以在查询中指定更多详细信息,您将在数据集中收到更少的数据,甚至可能只收到您需要的记录。几乎在任何情况下,由数据库完成过滤都会更快。
如果您需要在代码中进行搜索/过滤,那么也许您可以要求您的数据库至少以一种将更有可能的记录(可能按日期)放在前面的方式对数据进行排序。
但是如果您仍然需要了解您的特定数据集是否存在差异,您可以从前到后和从后到前循环遍历整个数据集并测量差异。 为此,请确保先打开查询/数据集,然后使用 DataSet.Last 跳转到最后一条记录,因为某些数据集不会一次获取所有数据,但这会强制它们这样做。之后,可以循环到第一条记录,然后再次循环到最后一条记录,同时用高精度计数器(QueryPerformanceCounter)测量每个循环。
关于Delphi Dataset.Prior 与 Dataset.Next 性能对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14898146/