【发布时间】:2011-11-04 22:47:35
【问题描述】:
我们正在尝试找出一些从 TADOQuery 读取的性能修复。目前,我们使用 'while not Q.eof do begin ... Q.next 方法遍历记录。对于每条记录,我们读取每条记录的 ID 和值,并将每条记录添加到组合框列表中。
有没有办法一次性将指定字段的所有值转换为列表?而不是遍历数据集?如果我可以做类似的事情,那将非常方便......
TStrings(MyList).Assign(Q.ValuesOfField['Val']);
我知道这不是一个真正的命令,但这是我正在寻找的概念。寻找快速响应和解决方案(一如既往,但这是为了解决一个非常紧迫的性能问题)。
【问题讨论】:
-
更具体地说,我们必须遍历数据集中的每条记录,读取 2 个字段(ID:Integer 和 Val:String)并将其添加到组合框中。那么当有超过 20,000 条记录时,这需要很长时间,我正在寻找一种更快的方法。
-
组合框中的 20,000 行需要处理很多,尤其是对于一些可怜的最终用户而言。也许你应该重新考虑你的设计?
-
谁是我们? 很长的时间有多长? 20k 行数据并不多。您希望我们紧急优化哪些代码?消极的。 @Mikael Eriksson,有一些非常大的简单组合框或列表框的应用程序,例如:电子词典中的索引。
-
您可以将整个行集提取到
TStringsdecendant,然后将其分配给控制(使用分析)。如果没有实际代码,就不能再说什么了。 -
@PrematureOptimization:看看 TStrings.Assign,这不太可能比他已经在做的更快。
标签: performance delphi list tadoquery