首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时使用Records对象

何时使用Records对象
EN

Stack Overflow用户
提问于 2009-02-25 09:32:42
回答 3查看 3.2K关注 0票数 1

我使用Delphi,但我认为这个问题对于任何面向对象的编程语言都是有效的。

我什么时候应该对对象使用记录。我曾经认为,当您对一组相关数据有一些简单的定义时,您就使用了记录,这些数据希望存储在一起,而这些数据不需要自己操作。然而,每次我决定将一段数据和其他数据一起放入一个记录中时,我就想出了为什么它应该是一个完全成熟的对象的理由。

数据需要一些属性或methods.

  • Memory管理(创建和销毁)与对象(至少在Delphi中)要简单得多,这几乎总是有一个原因。使用对象的

  • 在速度和内存方面可能不会更昂贵,但更灵活。

事实上,我最近得出的结论是,在现代应用程序中,对对象使用记录的唯一时间可能是从磁盘读取二进制文件,该文件可以直接读取到记录数组中。

我继承了一个有10年历史的项目,该项目广泛地将记录用于对象上的小数据段,我想知道是只有我,还是应该将这些概念交给经验回收站。

讨论。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-02-25 10:28:05

当没有方法对您的数据进行操作时,

  1. 大部分时间都是无用的。
  2. 是对象和记录之间最大的区别之一,它的事实是记录在堆栈上是默认的,而在堆上是对象。要获得堆上的记录,您可以得到所指的所有麻烦,但是当您可以将它们留在堆栈中时,它比管理对象的生存期要容易得多。但让我们面对现实,短命记录几乎没有什么用处。当对象被实例化时,不仅是保留内存,还有需要管理的VMT,还有记录没有的东西。因此,分配对象比分配记录要贵一些,但我认为,当你不谈论项目的思想发送时,它是可以忽略的。

要做出选择,您需要考虑如何使用这些对象或记录。如果要读取大型二进制文件,则需要使用记录(将整个缓冲区读入记录数组可能会将它们转换为要处理的对象)。如果您正在处理结构化数据,那么我们的运行时生成的数据对象似乎要容易得多。

票数 1
EN

Stack Overflow用户

发布于 2009-02-25 18:45:00

如果您所处的情况只是处理数据,那么我认为使用记录是很好的。

一些典型的情景:

  • Reporting
  • 批处理更新
  • 绑定名称/值数据,以便在构建对象时删除列表。内存中的
  • 关系数据缓存
  • 对大量数据

执行操作

但是,正如您所指出的,这些场景在典型的OO应用程序中占少数。

票数 0
EN

Stack Overflow用户

发布于 2020-05-22 14:11:09

您可以在所谓的记录对象中一起使用记录&对象,具有高效处理数据的优点,例如,一个巨大的整数加密盒,通过将这些对象封装在记录中,我们获得了更快的速度和更多的事务:

代码语言:javascript
复制
TKeyObjAB= record
  ID:string;
  n:TInteger; {the modulus}
  phi:TInteger; {Totient phi=(p-1)*(q-1)}
  e:TInteger; 
  d:TInteger; {private key if e relative to phi,
                which means that d*e mod phi = 1}
  blocksize:integer;    
  keysize:Integer; {bits in modulus}
  benchmark: string; //double;
end;

然后用两个或两个以上的recobj实例化它:

代码语言:javascript
复制
var
 tAlice:TKeyObjAB;
 tBob:  TKeyObjAB;

构造函数是一个简单的函数,可以插入您的成员:

代码语言:javascript
复制
function Obj_createAB(newid:string; 
  newkeysize:integer; actor:TKEYObjAB):TKeyObjAB;
begin
  with actor do begin
    id:=newid;
    keysize:=newkeysize;
    n:=TInteger.Create(0);
    phi:=TInteger.Create(0);
    e:=TInteger.create(0);
    d:=Tinteger.create(0);
    benchmark:= '';
  end;
 result:= actor;  
end;

// invoke instances
talice:= Obj_createAB('Alice', 256, talice)
tbob:= Obj_createAB('Bob', 512, tbob)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/585321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档