1

現在、Vista で CodeGear Delphi 2007 を使用しています。私のアプリケーションは、かなり重い計算中にメモリ不足エラーを返します。.exe ファイルは 150 Mb から 2 Gb にまで膨れ上がります (! LOL )

この問題について:

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);

マーク

エドワード

4

2 に答える 2

1

私の知る限り、ArrayList は Delphi では使用されていない Java/C# コレクションです。同等のものは TObjectList と呼ばれます。(または TList ですが、オブジェクトを扱う場合は TObjectList を使用することをお勧めします。) それはあなたが使用しているものですか? 私はあなたがいると仮定します。

あなたの問題はオブジェクトタイプにあるようです。リストから適切なタイプのオブジェクトを取得するには、2 つの方法があります。通常のリストを使用して型キャストするか、D2009 または D2010 を使用している場合はジェネリック リストを使用できます。

まず、TObjectList を使用します。

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

2 番目の方法: ListTriangleRes を として宣言し、 Generics.Collections をusesTObjectList<TTriangleRes>に追加します。これにより、コンパイラは TTriangleRes オブジェクトのみがリストに出入りすることを確認するため、実行時ではなくコンパイル時に型の安全性が確保されます。

いずれにせよ、中間の TObject 変数は必要ありません。

于 2009-09-30T13:55:49.260 に答える
0

あなたが何をしようとしているのかよくわかりませんが、最後のコードは MyTriangleRes :=ListTriangleRes[TriangleA-1] ではなく、 Result:=MyTriangleRes.GetVz(ComNr,PtNr) ですか?

于 2009-09-30T13:41:42.000 に答える