2011-09-06 62 views
2

我需要釋放存儲在ArrayList中的對象的列表。我知道你可以在Delphi中調用免費程序,但在Delphi Prism中沒有免費程序。我不只是想從列表中刪除對象,而且還從內存中釋放它。如何在Delphi Prism中釋放對象的數組列表?

例如說我有這個下面的類

TheClass = Class 
private 
theStr:String; 
protected 
public 
end; 

method TheForm; 
begin 
TheArrayList:=new ArrayList; 
end; 

要添加對象我這樣做:

method TheForm.AddToList; 
var 
tmpObj:TheClass; 
begin 
tmpObj := new TheClass; 
TheArrayList.Add(tmpObj); 
end; 

從列表中刪除對象,這是我會怎麼做,但有是免費的 程序。

method TheForm.DeleteFromList; 
var I:integer; 
begin 
for I:=0 to theArrayList.count-1 do 
begin 
    theClass(theArrayList[I]).free;  <-------I know this doesnt work. 
    theArrayList.RemoveAt(I); 
end; 
end; 
end; 

Delphi Prism中如何完成對象的釋放列表?

感謝,

+0

這是帶有垃圾回收器的.net。讓它決定何時放開記憶。 –

+0

@大衛,好吧。但是如果出現這種情況,你需要強制釋放對象,而不是等待垃圾收集器。 – ThN

回答

4

由於你的類沒有保存任何非託管資源,例如文件,窗口句柄,數據庫連接等,除了讓.NET垃圾回收器在確定時間合適時釋放內存之外,你不需要做任何事情。

試圖強制垃圾收集器提前運行通常會導致比簡單地讓它執行其工作更糟糕的性能。

如果你有一個非託管資源類,那麼你應該follow the IDisposable pattern

1
while theArrayList.count > 0 do 
    theArrayList.RemoveAt(0); 

GC會幫助你。

+1

ArrayList.Clear呢? –

+0

ArrayList.Clear? +1 – TheHorse

1

Delphi Prism程序運行在.NET上。沒有必要釋放任何對象,因爲垃圾收集器最終會做到這一點。正如某人已經評論過的,如果對象實現它,您可以調用IDisposable.Dispose()來釋放內存以外的其他資源。

也有以構建體,這是一個有點像創建試試,最後,自由端在Delphi:

using MyArrayList = new ArrayList do 
begin 
    // use ArrayList... 
end; // IDisposable(ArrayList).Dispose is called, if applicable. 

這不會對數組中的項目,當然,工作。如果你真的想要,你可以在每一個上調用Dispose。但一般來說,這不是必需的。

所以:

method TheForm.DeleteFromList; 
begin 
    theArrayList.Clear; 
end; 

無需釋放任何東西。

+0

@David:感謝您的編輯。 –