2009-09-30 58 views
1

我目前正在与Vista CodeGear Delphi 2007下工作。 我的应用程序在一些相当繁重的计算过程中返回内存不足错误。 的.exe文件从150 MB增长到惊人的2 Gb如何检索multidimentional包含来自arraylist多维数组的类元素

关于这个问题(笑!):

1)我改变了一些数组到ArrayList中 但它给了我一些比较困难的问题,解决方案(请参阅下面的示例)

2)适用于多维结构和需求的建议代码中的小改动最受赞赏!

现在解决成员的老办法是:

function TResults.GetTriangleA(ComNr, triangleA, PtNr : integer) : single; 
    Begin 
    try 
    result := ListTriangleRes[TriangleA - 1].GetA(ComNr, PtNr); 

而且疗法是类TriangleResult:

TTriangleRes = class(TResults) 
private 
IndexPoint1, IndexPoint2, Indexpoint3 : integer; 
MyA : array of array [1..3] of single; 
MyB : array of array [1..3] of single; 

在这里,我试图用新的ArrayList的工作我的出路,但并不是很成功到现在

function TResults.GetTriangleVz(ComNr, triangleA, PtNr : integer) : single; 
Var 
    MyTriangleRes: TTriangleRes; 
    MyObj:   Tobject; 
begin 
    MyTriangleRes:= TTriangleRes.Create ; 
    try 
    MyObj := ListTriangleRes[TriangleA - 1] ; 
    result := MyObj <<<<?????? how to>>>>MyTriangleRes.GetVz(ComNr, PtNr); 

MKR

爱德华

回答

0

我真的不知道你正在尝试做的,但不应该你最后的代码是MyTriangleRes:= ListTriangleRes [TriangleA-1],然后结果:= MyTriangleRes.GetVz(ComNr, PtNr)?

1

据我所知,ArrayList是一个Java/C#集合,它不在Delphi中使用。我们的等价物称为TObjectList。 (或TList,但如果您使用的是对象,最好使用TObjectList。)那就是您正在使用的?我会假设你是。

它看起来像你的问题是对象类型。有两种方法可以从正确类型的列表中获取对象。您可以使用普通列表和类型转换,或者如果您有D2009或D2010,则可以使用通用列表。

第一种方式,使用TObjectList:

MyTriangleRes := ListTriangleRes[TriangleA - 1] as TTriangleRes; //type-safe cast 

方式二:声明ListTriangleRes作为TObjectList<TTriangleRes>,并添加Generics.Collections您使用条款。这样可以在编译时而不是运行时提供类型安全性,因为编译器将确保只有TTriangleRes对象进入列表。

无论哪种方式,都不需要中间TObject变量。

+0

第二种方式仅适用于D2009 +,爱德华正在使用D2007 – 2009-09-30 20:52:18

相关问题