It's not good to call the GC yourself - you shouldn't need to if you obey the rules.
In this case, you are adding Bitmaps - which are large objects and which support the Dispose method.
So when you remove them from your list and stop needing them, get rid of them then.
private void remove(List<Bitmap> list, int index)
{
if (list.Count > index)
{
Image i = list[index];
list.RemoveAt(index);
i.Dispose();
}
}
However that won't reduce the memory shown in the Task Manager - once .NET expands the heap, it doesn't reduce it.