Если вы можете получить большие блоки непрерывных записей, которые не перекрываются, и назначить объект чтения данных каждому, тогда вы можете использовать поток для каждого считывателя и получать выгоды, если источник данных не вызывает бутылку шея. В основном вы будете использовать несколько объектов чтения вместо промежуточного хранилища.
, например
where ID >= 0 && ID < 10000 << block 1 for data reader instance 1
where ID >= 10000 && ID < 20000 << block 2 for data reader instance 2
where ID >= 20000 && ID < 30000 << block 3 for data reader instance 3
Этот пример трех читателей позволит вам создать три объекта "одновременно".
Если вы дополнительно используете итератор C # , обернутый вокруг всего этого процесса, у вас может быть способ вернуть все объекты, как если бы они были одной коллекцией, без использования промежуточного хранилища для экземпляров.
foreach ( object o in MyIterator() ) { ....
Это приведет к тому, что объекты вернутся под баннер, используемый из одного потока, даже если они были созданы в разных потоках. Я просто сижу на лыжах в этой последней части.