0

我正在向我的 DevExpress TdxMemDataset添加一些索引以提高性能。TdxMemIndex具有包含 soCaseInsensitive选项SortOptions。我的数据通常是 GUID 字符串,因此不区分大小写。我想知道我是否最好将所有数据强制为相同的大小写,或者soCaseInsensitive标志和使用loCaseInsensitive标志并调用 Locate 只会有轻微的性能损失(大约等于每次转换我的字符串的大小写)我需要使用索引)。

在这一点上,我将关闭 CaseInsentive 并只是转换案例。

4

2 回答 2

8

恕我直言,最好是在发布时确保数据质量。推理:

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

  2. 您只需输入一次数据。Searching/Sorting/Filtering 这一切都暗示了 TdxMemDataSet 的内部转换引擎,这是一个重复的动作。此外,还有其他连锁动作会在没有意识到的情况下触发这个引擎。(例如,默认情况下排序的 TcxGrid 具有 GridMode:=True (我假设您使用 DevEx. 组件)并且有一个充当代理的类,将排序消息传递给底层数据集。

  3. 通常数据输入是分步完成的,一批记录一个或几个记录。唯一值得注意的例外是数据采集应用程序。但是在以上两种情况下,用户的可用性文化都允许您使用更长响应时间。(IOW 多少会在持续 0.005 毫秒的记录帖子中添加大写调用?) OTOH,用户对数据检索操作(搜索、排序、过滤等)的速度要求很高。尽可能快地保持数据检索。

  4. 准备好暴露数据库中的数据可以降低在您编写(如果您要编写)其他模块时处理错误的风险(您需要记住 AnsiUpperCase 以您将编写的任何语言的任何模块中的数据)。这里还有一个经典示例,当您将使用其他外部工具访问数据时(例如,数据库管理器对数据执行 SQL SELCT)。

hth。

于 2009-03-16T17:47:06.873 回答
1

也许 DevExpress 论坛(或任何支持电子邮件,如果您可以访问它)将是寻求有关该性能问题的权威答案的更好地方。

无论如何,最好在保存数据的那一刻保证数据采用您想要的格式 - 原因已经解释清楚了。因此,在特定情况下,请确保 GUID 以大写(或小写,这是个人喜好)大小写。如果它是具有 guid 数据类型的 SQL Server 或其他数据库服务器,请确保 SELECT 可以正常工作 - 如果适用且可能,甚至排序。

于 2009-03-16T18:49:39.640 回答