2008-11-12 74 views
1

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

+0

它有助于了解您正在考虑使用哪种编程语言,并带有类似的问题。 – unwind 2008-11-12 08:01:02

回答

3

不知道我完全关注你,但看看TList。

在德尔福7至少,它是作为一种指针实施。如果您知道有多少结果回来,您可以使用容量属性提前预先分配列表。

如果空间不足,该列表将自动增长。它的增长量取决于列表的大小。

看看类单元的来源,看看它在做什么。

编辑:同样在D2009中,genist支持被添加到了TList中,使得它更好用。

1

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

+0

对于提问者的建议,查找仍然是不变的。 – 2008-11-12 17:00:50

0

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

type 
    pMyRecord : ^TMyRecord; 
... 
... 
... 
var 
    p : pMyRecord; 
... 
... 
New(p); 
with p^ do 
begin 
    ... 
    ... 
end; 
... 
MyList.Add(P); 
0

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

0

正在关注mj2008,您可以使用TCLientDataset而不是记录数组。 结果集有多大?

相关问题