I have a heavily populated arraylist, which I want to clear and reuse. If I clear it will it free up that previously used memory?
I should also mention that the arraylist is a private read only field of a class that still has lots of active work to do after I use the arraylist first time round. So I can't wait for garbage collection after class goes out of scope.
Is the Clear method fast enough? Or should I destroy and create a new arraylist?
Question update:
If I have field declared like this (thanks to Jon's advice)
/// <summary>
/// Collection of tasks.
/// </summary>
private List<Task> tasks = new List<Task>();
then I populate it.... (heavily)
Now if ins开发者_如何学Gotead of clearing it and trimming, can I just call:
tasks = new List<Task>();
Would this be recommended?
Do whichever expresses your intention better. Do you actually want a new list? If so, create a new one. If you conceptually want to reuse the same list, call Clear
.
The documentation for ArrayList
does state that Clear
retains the original capacity - so you'll still have a large array, but it'll be full of nulls instead of reference to the previous elements:
Capacity
remains unchanged. To reset the capacity of theArrayList
, callTrimToSize
or set theCapacity
property directly. Trimming an emptyArrayList
sets the capacity of theArrayList
to the default capacity.
Any reason you're using ArrayList
rather than List<T>
by the way?
If you want the memory to actually be free'd, set it to null and invoke the garbage collector. Then create a new ArrayList. If you set it to null and then create a new one, it will eventually get garbage collected when additional memory is required. Also, I second generic collections. It's been a long time now since I've used ArrayList.
精彩评论