1

我想将数据库中的大型结果集存储在内存中。每条记录都有可变长度,访问时间必须与数组一样快。实现这一点的最佳方法是什么?我正在考虑将偏移量保存在单独的表中并连续存储所有记录?奇怪吗?(编程语言:德尔福)

4

5 回答 5

3

不确定我是否完全跟随你,但看看 TList。

至少在 Delphi 7 中,它被实现为一个指针数组。如果您知道有多少结果返回,您可以使用容量属性提前预先分配列表。

如果空间不足,列表将自动增长。它增长多少取决于列表有多大。

查看 classes 单元的源代码,看看它在做什么。

编辑:同样在 D2009 中,TList 中添加了泛型支持,这使它更好用。

于 2008-11-12T10:43:55.227 回答
1

最好的方法可能是包含一个指向记录的指针数组。在这种情况下,您不必处理偏移量,并且查找将是恒定的时间。

于 2008-11-12T08:02:32.960 回答
0

我会使用 TList,并存储指向您的记录的指针。

type
  pMyRecord : ^TMyRecord;
...
...
...
var
  p : pMyRecord;
...
...
New(p);
with p^ do
begin
  ...
  ...
end;
...
MyList.Add(P);
于 2008-11-12T11:22:40.217 回答
0

为什么不使用数据库的 MEMORY 版本?大多数都有办法将完整的表保存在内存中,通常涉及 SQL 关键字 MEMORY。您将表从磁盘复制到内存表,然后可以以内存速度使用所有正常的数据库操作。我知道这在 DBISAM 中效果很好。

于 2008-11-12T11:25:31.303 回答
0

mj2008之后,您可以使用 TCLientDataset 而不是记录数组。该结果集有多大?

于 2008-11-12T17:03:21.980 回答