gpt4 book ai didi

performance - 德尔福性能: Reading all values under a field in a dataset

转载 作者:行者123 更新时间:2023-12-03 14:49:10 24 4
gpt4 key购买 nike

我们正在尝试找出一些从 TADOQuery 读取的性能修复程序。目前,我们使用 'while not Q.eof do begin ... Q.next 方法循环记录。对于每条记录,我们读取每条记录的 ID 和值,并将每条记录添加到组合框列表中。

有没有一种方法可以一次性将指定字段的所有值转换为列表?而不是循环遍历数据集?如果我能做类似的事情,那就真的很方便了......

TStrings(MyList).Assign(Q.ValuesOfField['Val']);

我知道这不是一个真正的命令,但这就是我正在寻找的概念。寻找快速响应和解决方案(一如既往,但这是为了解决一个非常紧急的性能问题)。

最佳答案

查看您的评论,这里有一些建议:

在这种情况下,有一些事情可能会成为瓶颈。第一个是反复查找字段。如果您在循环内调用 FieldByNameFindField,则您会浪费 CPU 时间来重新计算不会更改的值。为您正在读取的每个字段调用一次 FieldByName,并将它们分配给局部变量。

从字段中检索值时,调用 AsStringAsInteger 或返回您要查找的数据类型的其他方法。如果您从 TField.Value 属性读取数据,则您会在 variant 转换上浪费时间。

如果您要向 Delphi 组合框添加一堆项目,您可能会处理 Items 属性形式的字符串列表。设置列表的 Capacity 属性,并确保在开始更新之前调用 BeginUpdate,并在结束时调用 EndUpdate。这可以实现一些内部优化,从而更快地加载大量数据。

根据您使用的组合框,在处理其内部列表中的大量项目时可能会遇到一些问题。看看它是否有一个“虚拟”模式,在这种模式下,您不必预先加载所有内容,只需告诉它需要多少个项目,当它被下拉时,它会为应该显示的每个项目调用一个事件处理程序在屏幕上,然后您为其指定要显示的正确文本。这确实可以加快某些 UI 控件的速度。

当然,您还应该确保数据库查询本身很快,但 SQL 优化超出了这个问题的范围。

最后,Mikael Eriksson 的评论绝对值得关注!

关于performance - 德尔福性能: Reading all values under a field in a dataset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8016595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com