【问题标题】:What is best way to implement variable length arrays?实现可变长度数组的最佳方法是什么?
【发布时间】:2010-09-21 22:45:10
【问题描述】:

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

【问题讨论】:

  • 了解您正在考虑使用哪种编程语言以及诸如此类的问题会有所帮助。

标签: delphi arrays variable-length


【解决方案1】:

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

【讨论】:

  • 对于提问者的建议,查找仍然是固定时间。
【解决方案2】:

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

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-10
          • 1970-01-01
          • 1970-01-01
          • 2010-09-09
          • 2015-08-21
          相关资源
          最近更新 更多