我想将数据库中的大型结果集存储在内存中。每条记录的长度都可变,访问时间必须与数组一样快。实现这个的最佳方法是什么?我想在一个单独的表中保留偏移并连续存储所有记录?这很奇怪吗? (编程语言:Delphi)
答案 0 :(得分:3)
不确定我是否完全关注你,但请看看TList。
至少在Delphi 7中,它被实现为一个指针。如果您知道有多少结果会返回,则可以使用capacity属性提前预先分配列表。
如果空间不足,列表将自动增长。它增长多少取决于列表的大小。
查看类单元的源代码,了解它正在做什么。
编辑:同样在D2009中,为TList添加了genric支持,这使得它使用起来更好。
答案 1 :(得分:1)
最好的方法可能是包含一系列指向记录的指针。在这种情况下,您将不必处理偏移,并且查找将是恒定时间。
答案 2 :(得分:0)
我会使用TList,并将指针存储到您的记录中。
type
pMyRecord : ^TMyRecord;
...
...
...
var
p : pMyRecord;
...
...
New(p);
with p^ do
begin
...
...
end;
...
MyList.Add(P);
答案 3 :(得分:0)
为什么不使用数据库的MEMORY版本?大多数都有办法在内存中保留一个完整的表,通常涉及SQL关键字MEMORY。您将表从磁盘复制到内存表,然后可以以内存速度使用所有正常的数据库操作。我知道这在DBISAM中运行良好。
答案 4 :(得分:0)
在mj2008之后,您可以使用TCLientDataset而不是记录数组。 结果集有多大?