ну вообщемто переживать по поводу памяти в наше время не особо стоит волноватся(ну поянтное дело я не о том чтобы создать 100500 ненужных классов и оставить их, про такую вещь как размер списков и словарей). если особо интересно полистай msdn. также во время исполнентя можешь сотановить и посмотреть Capacity - это размер памяти выделеный для листа листа. Также, если зарание известен размер листа, то лучше иницализировать его спараметром Capacity - это ускорит добавление елементов в будующем(пока эти елементы не вылезут за ганицу) )
ПО поводу скорости доступа к елементам, то тут да, масивы работаеют на порядок быстрее.
Вот кстати пример по поводу выделяемой памяти-
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Mime;
using System.Text;
namespace ListTest
{
class Program
{
static void Main(string[] args)
{
List<object> objects=new List<object>();
objects.Add(new object());
int capacity=objects.Capacity;
for (int i = 0; i < 15; i++)
{
capacity = objects.Capacity;
int size = objects.Count;
Console.WriteLine("ExistElemets={0} Capacity={1}",size,capacity);
for (int j = 0; j < capacity-size+1; j++)
{
objects.Add(new object());
}
}
Console.ReadKey();
}
}
}