开发者

.net does ArrayList.Clear free up memory?

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 the ArrayList, call TrimToSize or set the Capacity property directly. Trimming an empty ArrayList sets the capacity of the ArrayList 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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜