гугли обработку больших объёмов данных в памяти. Вот например чтото похожее http://habrahabr.ru/blogs/net/114495/
если в блеклисте нужно хранить целые числа, то лучше использовать не HashSet, а реализовать хеш таблицу руками - добавление и поиск будеть работать примерно в 2 раза быстрее. Вот хорошая хеш функция для uint: Code: private static uint HF(uint a) { a = (a+0x7ed55d16) + (a<<12); a = (a^0xc761c23c) ^ (a>>19); a = (a+0x165667b1) + (a<<5); a = (a+0xd3a2646c) ^ (a<<9); a = (a+0xfd7046c5) + (a<<3); a = (a^0xb55a4f09) ^ (a>>16); return a; }