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