Should we use Generic Collection to improve safety and performance?
Absolutely.
A conventional collection, such as the ArrayList, implicitly stores objects.
This means, that doing this:
ArrayList list = new ArrayList();
list.Add(5);
list.Add("FooBar");
Is legitimate code. This introduces a handful of issues.
However, you eliminate all of these issues by using a generic collection:
List list = new List();
list.Add(5);
// Compile Time Error.
list.Add("FooBar")
You also gain intellisense support when working directly with indices of the collection, instead of just generic "object" intellisense.