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

有帮助吗?

解决方案

不确定我是否完全关注你,但请看看TList。

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

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

查看类单元的源代码,了解它正在做什么。

编辑:同样在D2009中,为TList添加了genric支持,这使得它使用起来更好。

其他提示

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

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

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

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

type
  pMyRecord : ^TMyRecord;
...
...
...
var
  p : pMyRecord;
...
...
New(p);
with p^ do
begin
  ...
  ...
end;
...
MyList.Add(P);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top