Как лучше оперировать большими объемами данных, используя C#?
Ситуация следующая: я получаю, предположим, около миллиона строк (возможно больше), которые записываю в List<MyClass> Followers.
Также у меня есть еще один список List<MyClass> Likes с таким же большим количеством элементов, около одного миллиона (возможно больше).
Далее мне нужно сделать Likes.Intersect(Followers).
Правильный ли я подход использую, храня это в обычных List<T>, или нужно делать это как-то иначе? И не нарвусь ли я на ограничение на объем List<T> в 2GB?
Каким образом можно сделать максимально быстрым фильтрацию (нахождения пересечения, INNER JOIN проще говоря) этих двух массивов данных?
List<T> не имеет ограничения по объему. Если у вас 32-битная система - то вы нарветесь на ограничения в 2 GB оперативки, если 64-битная - то будет забивать память под завязку. Подход неправильный, т.к. вы не знаете, сколько памяти у конечного юзера.
Правильно посоветовали насчет БД - это самый простой подход. Используйте SQLite, как самую простую переносимую БД.
Подход посложнее - сохранять записи в файлы, затем делать Intersect порционно, алгоритмически.