PLINQ C#

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#.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *