Сравнение i4o и PLINQ для больших коллекций - PullRequest
3 голосов
/ 02 марта 2009

У меня вопрос к любому, у кого есть опыт работы на i4o или PLINQ. У меня есть большая коллекция объектов (около 400 КБ), необходимых для запроса. Логика очень проста и понятна. Например, есть коллекция объектов Person, мне нужно найти людей, совпадающих с одинаковыми firstName, lastName, datebirth или первым инициалом FirstName / lastname и т. Д. Это просто трудоемкий процесс с использованием LINQ to Object. 1001 *

Мне интересно, если i4o (http://www.codeplex.com/i4o)

или PLINQ могут помочь улучшить производительность запроса. Какой из них лучше? И если есть какой-либо подход там.

Спасибо!

Ответы [ 3 ]

5 голосов
/ 02 марта 2009

Интересно, с 400k объектами, не будет ли более подходящим ответом база данных (в процессе или вне процесса). Это затем абстрагирует процесс создания индекса. В частности, любая база данных будет поддерживать несколько разных индексов для разных столбцов, что делает все цитируемые запросы очень поддерживаемыми без необходимости кодирования специально для каждого (просто позвольте оптимизатору запросов беспокоиться об этом).

Работа с ней в памяти может быть допустимой, но вам (с vanilla .NET) может потребоваться намного больше ручного управления индексами. Судя по всему, i4o, безусловно, стоило бы исследовать, но у меня нет данных для сравнения.

3 голосов
/ 03 декабря 2009

i4o: предназначен для ускорения запросов с использованием linq с использованием индексов, таких как старые дни реляционной базы данных.

PLinq: предназначен для использования дополнительных ядер процессора для параллельной обработки запроса.

Если производительность - ваша цель, в зависимости от вашего аппаратного обеспечения, я говорю, что с i4o это будет чертовским улучшением.

0 голосов
/ 02 марта 2009

Я не использовал i4o, но использовал PLINQ.

Не зная специфики запроса, который вы пытаетесь улучшить, трудно сказать, какой (если таковой имеется) поможет.

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

Похоже, i4o ​​помогает с индексацией, что ускоряет некоторые вызовы, но не другие.

Суть в том, что это зависит от выполняемого запроса.

...