PLINQ C#
Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье мы поговорили про класс Parallel в C#. В данной статье я бы хотел рассказать про PLINQ в C#. PLINQ — это параллельное выполнение LINQ-запроса. Когда мы указываем источник, для которого необходимо выполнить такой запрос, то у данного источника вызываем метод "AsParallel()". На этом можно и закончить рассказ про PLINQ.
Отмечу, что не все части таких запросов можно выполнять параллельно: проверять условия ("where") можно, а выполнять агрегатные функции ("min()", "max()", "count()") — нет. Также нельзя параллельно выполнять сортировку, группировку. Если имеется многоядерный процессор, и источник содержит большое количество объектов, то мы получим прирост производительности.
Хочется также отметить, что ни любой алгоритм можно распараллелить и, в первую очередь, нужно подумать можно ли выполнять определенные условия параллельно, не связаны ли элементы, которые мы проверяем, как-то между собой.
Давайте напишем пример, чтобы понять, как это работает:
using System;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Linq;
namespace TestApplicationForStudy
{
public class Room
{
public double square;
public bool hasFurniture;
public Room(double sq, bool hasFur)
{
this.square = sq;
this.hasFurniture = hasFur;
}
}
class Program
{
static void Main(string[] args)
{
// Создадим коллекцию из 4 комнат
List<Room> myRooms = new List<Room>();
myRooms.Add(new Room(25, true));
myRooms.Add(new Room(30, true));
myRooms.Add(new Room(16, true));
myRooms.Add(new Room(10, true));
// Выполним PLINQ-запрос
var result = from room in myRooms.AsParallel()
// Параллельно выполняем условия
where room.square > 17
// сортируем в обратном порядке
orderby room.square descending
select room;
foreach (Room room in result)
{
Console.WriteLine("Площадь комнаты = " + room.square);
}
Console.ReadLine();
}
}
}
В данной небольшой статье вы узнали про использование PLINQ в C#.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.




