Pra*_*eep 0 delphi oop ooad design-patterns
我有一个可能需要处理数十亿个对象的应用程序.每个对象都是TRange类的类型.这些范围是在算法的不同部分创建的,这取决于某些条件和其他对象属性.因此,如果您有100个项目,则无法在不创建所有先前对象的情况下直接创建第100个对象.如果我创建所有(数十亿)对象并添加到集合中,系统将抛出Outofmemory错误.现在我想迭代遍历每个对象主要有两个目的:
如何在不提高Outofmemory的情况下为这些对象有效地创建迭代器?
我通过将函数指针传递给算法函数来处理第一种情况.例如:
procedure createRanges(aProc: TRangeProc);//aProc is a pointer to function that takes a //TRange
var range: TRange;
rangerec: TRangeRec;
begin
range:=TRange.Create;
try
while canCreateRange do begin//certain conditions needed to create a range
rangerec := ReturnRangeRec;
range.Update(rangerec);//don't create new, use the same object.
if Assigned(aProc) then aProc(range);
end;
finally
range.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
但是这种方法的问题在于,要添加一个新功能,比如检索我之前提到的Total权重,要么我必须复制算法函数,要么传递一个可选的out参数.请提出一些想法.
谢谢大家
普拉迪普
对于如此大量的数据,您只需要在内存中包含一部分数据.其他数据应序列化到硬盘驱动器.我解决了这样一个问题:
这样记录是透明的.您总是像访问内存一样访问它们,但它们可能首先从硬盘驱动器加载.它工作得很好.顺便说一句,RAM以非常类似的方式工作,因此它只保存硬盘上所有数据的某个子集.这是你的工作集.
我没有发布任何代码,因为它超出了问题本身的范围,只会混淆.
| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |