2013-07-08 4 views
0

Я искал подтверждение того, что то, что я думаю, является идеальным решением.PLINQ и поиск больших данных

У меня есть список из нескольких миллионов «сущностей», поступающих от клиента. Я хочу сравнить каждый объект с другим (или несколькими другими) списками, которые могут иметь миллионы сущностей, и записывать хиты.

Сущность обычно является лицом с именем/номером/датой рождения/и т. Д., Но может быть чем-то вроде фирменного наименования.

У меня есть проект, который принимает запрос как один объект xml, выполняет поиск и сохраняет запрос и результат xml в базу данных.

Мне нужно запустить этот проект на настраиваемом числе потоков, создавая новые потоки, как и другие. Является ли PLINQ идеальным решением для этого?

Так сказать, я хочу 10 потоков. Я хочу взять первые 10 объектов и создать 10 потоков. По завершении первого потока 11-й объект должен начинаться с нового потока и т. Д. До тех пор, пока все не будут найдены.

Спасибо за любой вклад, я не разбираюсь в параллелизме.

ответ

0

Если вы собираетесь сохранять в базу данных в любом случае, почему бы вам просто не импортировать свои данные и использовать запросы для объединения двух наборов данных? Это должно выполняться намного быстрее, чем пытаться сделать это в памяти. Мне бы очень хотелось увидеть память, которую вы потребляете миллионами сущностей.

Если вы должны сделать это в памяти, использование PLinq МОЖЕТ оказаться быстрее. Есть накладные расходы на создание потоков и переключение контекста. С PLinq вы должны позволить движку определять распределение потоков. Вы должны редко создавать потоки явно в этот момент.

Однако, если список, который вы сравниваете, относительно статичен, вы можете извлечь большую выгоду из создания словаря и полагаться на ключ для поиска, поскольку вам не придется сканировать весь список для каждого элемента, который вы пытаются найти.

Смежные вопросы