I agree with Daniel.
In addition, however, there is specific performance information from Microsoft on MSDN comparing List<T>
and ArrayList
that is worth a read.
http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx
In deciding whether to use the List or ArrayList class, both of
which have similar functionality, remember that the List class
performs better in most cases and is type safe. If a reference type is
used for type T of the List class, the behavior of the two classes
is identical. However, if a value type is used for type T, you need to
consider implementation and boxing issues.
If a value type is used for type T, the compiler generates an
implementation of the List class specifically for that value type.
That means a list element of a List object does not have to be
boxed before the element can be used, and after about 500 list
elements are created the memory saved not boxing list elements is
greater than the memory used to generate the class implementation.
Make certain the value type used for type T implements the
IEquatable generic interface. If not, methods such as Contains must
call the Object.Equals(Object) method, which boxes the affected list
element. If the value type implements the IComparable interface and
you own the source code, also implement the IComparable generic
interface to prevent the BinarySearch and Sort methods from boxing
list elements. If you do not own the source code, pass an IComparer
object to the BinarySearch and Sort methods
It is to your advantage to use the type-specific implementation of the
List class instead of using the ArrayList class or writing a
strongly typed wrapper collection yourself. The reason is your
implementation must do what the .NET Framework does for you already,
and the common language runtime can share Microsoft intermediate
language code and metadata, which your implementation cannot.