По идее, вы не должны заморачиваться сборщиком мусора.
Он сам знает когда ему проверить, есть ли неиспользуемые объекты и сам их очистит.
Если будете часто его вызывать, в частности GC.Collect, это замедлит работу вашего приложения.
И еще, если у вас 20млн строк - то лучше используйте IEnumerable и работаете с ограниченным количеством строк - постранично к примеру. Тогда проблем с памятью не будет.