我正在向我的 DevExpress 添加一些索引 TdxMem数据集 以提高性能。这 Tdx内存索引排序选项 其中包括选项 所以不区分大小写. 。我的数据通常是 GUID 字符串,因此不区分大小写。我想知道我是否最好将所有数据强制到相同的情况下,或者如果 所以不区分大小写 标志并使用 不区分大小写 调用 Locate 的标志只会造成很小的性能损失(大致相当于每次需要使用索引时转换字符串的大小写)。

此时,我将 CaseInsentive 关闭并仅转换大小写。

有帮助吗?

解决方案

恕我直言,最好的办法是保证发布时的数据质量。推理:

  1. 您(通常)知道数据的性质。所以,例如。您可以使用大写(知道 GUID 都在 ASCII 范围内)而不是 很多 较慢的 AnsiUpperCase,像 TdxMemDataSet 这样的通用组件被迫使用。

  2. 您只需输入一次数据。搜索/排序/过滤这一切都意味着 TdxMemDataSet 的内部大写引擎是一个重复的操作。此外,还有其他连锁动作会在不知不觉中触发该引擎。(例如。默认情况下排序的 TcxGrid 具有 GridMode:=True (我假设您使用 DevEx.组件)并有一个像代理一样的类,将排序消息传递到底层数据集。

  3. 通常数据输入是分步完成的,一批中一条或几条记录。唯一值得注意的例外是数据采集应用。但在上述两种情况下,用户的可用性文化都允许 方式 更长的响应时间供您玩耍。(IOW,将大写调用添加到持续 0.005 毫秒的记录帖子需要多少钱?) OTOH,用户是 非常严格 数据检索操作(搜索、排序、过滤等)的速度。尽可能快地检索数据。

  4. 让数据库中的数据准备好公开可以降低编写时出现处理错误的风险(如果 您将编写)其他模块(您需要记住以 AnsiUpperCase 形式使用您将编写的任何语言的任何模块中的数据)。这里还有一个典型的例子是当您将使用其他外部工具来访问数据时(例如。数据库管理器对数据执行 SQL SELECT)。

嗯。

其他提示

也许DevExpress的论坛(或曾经支持电子邮件,如果你有机会的话)会是一个更好的地方,寻求对性能问题的权威答案。

反正是更好地保证数据是你想要的格式 - 的原因plainth已经解释 - 那一刻你保存它。因此,在特定,确保GUID是写在上(或下,其口味的问题)的情况下。如果是SQL Server或有一个GUID数据类型另一个数据库服务器,确保SELECT使工作 - 如果适用和可能的,即使排序

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top