Delphi中如何构建适用于快速过滤的长尾数据结构算法?

2026-04-10 19:552阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计427个文字,预计阅读时间需要2分钟。

Delphi中如何构建适用于快速过滤的长尾数据结构算法?

我正在优化Delphi应用程序的一部分,其中涉及对象列表的标准过滤。对象存储在TObjectList结构中,通常使用每个过滤器选择整个集合的非常小的百分比(例如,1%-2%)。对象总数可以在对象统计中查看。

我正在优化Delphi应用程序的一部分,其中对象列表经常使用不同的标准进行过滤.对象保存在TObjectList结构中,通常用每个过滤器选择整个集合的非常小的百分比(例如1%).对象总数可以在100k范围内,并且在计算期间主要集合不会改变.尽管过滤器仅应用于少数属性,但无法对列表进行排序以优化所有可能的标准.

我正在寻找有关如何组织对象(数据结构)或可用于解决此问题的算法的建议.谢谢!

过滤示例:

((Object.A between 5 and 15) AND (Object.B < 20) AND (Object.C(AParam) > 0)) OR (Object.IsRoot(...)) 想法#1

在分析器中运行您的代码.找出是否有任何慢点.

Delphi中如何构建适用于快速过滤的长尾数据结构算法?

想法#2

您可以通过将对象按顺序存储在内存中来利用缓存效果. (我假设你从头到尾依次走你的名单.)

一种方法可能是使用记录数组而不是对象列表.如果在你的情况下这是可能的.请记住,Delphi 2006中的记录可以有方法(但不是虚拟方法).

另一个想法可能是编写自己的类分配器.我从来没有尝试过,but here’s an article I found.也许尝试使用指针而不是使用TObjectList来对象.

本文共计427个文字,预计阅读时间需要2分钟。

Delphi中如何构建适用于快速过滤的长尾数据结构算法?

我正在优化Delphi应用程序的一部分,其中涉及对象列表的标准过滤。对象存储在TObjectList结构中,通常使用每个过滤器选择整个集合的非常小的百分比(例如,1%-2%)。对象总数可以在对象统计中查看。

我正在优化Delphi应用程序的一部分,其中对象列表经常使用不同的标准进行过滤.对象保存在TObjectList结构中,通常用每个过滤器选择整个集合的非常小的百分比(例如1%).对象总数可以在100k范围内,并且在计算期间主要集合不会改变.尽管过滤器仅应用于少数属性,但无法对列表进行排序以优化所有可能的标准.

我正在寻找有关如何组织对象(数据结构)或可用于解决此问题的算法的建议.谢谢!

过滤示例:

((Object.A between 5 and 15) AND (Object.B < 20) AND (Object.C(AParam) > 0)) OR (Object.IsRoot(...)) 想法#1

在分析器中运行您的代码.找出是否有任何慢点.

Delphi中如何构建适用于快速过滤的长尾数据结构算法?

想法#2

您可以通过将对象按顺序存储在内存中来利用缓存效果. (我假设你从头到尾依次走你的名单.)

一种方法可能是使用记录数组而不是对象列表.如果在你的情况下这是可能的.请记住,Delphi 2006中的记录可以有方法(但不是虚拟方法).

另一个想法可能是编写自己的类分配器.我从来没有尝试过,but here’s an article I found.也许尝试使用指针而不是使用TObjectList来对象.