Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю Страница 294

Тут можно читать бесплатно Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Компьютеры и Интернет / Базы данных. Так же Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте FullBooks.club (Фулбукс) или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних просмотр данного контента СТРОГО ЗАПРЕЩЕН! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту pbn.book@yandex.ru для удаления материала


Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю краткое содержание

Прочтите описание перед тем, как прочитать онлайн книгу «Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю» бесплатно полную версию:

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле.

Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных.

Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю читать онлайн бесплатно

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - читать книгу онлайн бесплатно, автор Троелсен Эндрю

through

nothing

business

another

looking

prisoner

Cruncher

Longest word is: undistinguishable

Помочь удостовериться в том, что приложение задействует все доступные процессоры машины, может параллельный вызов методов FindTenMostCommon() и FindLongestWord(). Для этого модифицируйте метод GetStats():

void GetStats()

{

  // Получить слова из электронной книги.

  string[] words = _theEBook.Split(

    new char[] { ' ', '\u000A', ',', '.', ';', ':', '-', '?', '/' },

    StringSplitOptions.RemoveEmptyEntries);

  string[] tenMostCommon = null;

  string longestWord = string.Empty;

  Parallel.Invoke(

    () =>

    {

      // Найти 10 наиболее часто встречающихся слов.

      tenMostCommon = FindTenMostCommon(words);

    },

    () =>

    {

      // Найти самое длинное слово.

      longestWord = FindLongestWord(words);

    });

  // Когда все задачи завершены, построить строку,

  // показывающую все статистические данные.

  ...

}

Метод Parallel.Invoke() ожидает передачи в качестве параметра массива делегатов Action<>, который предоставляется косвенно с применением лямбда-выражения. В то время как вывод идентичен, преимущество заключается в том, что библиотека TPL теперь будет использовать все доступные процессоры машины для вызова каждого метода параллельно, если подобное возможно.

Запросы Parallel LINQ (PLINQ)

В завершение знакомства с библиотекой TPL следует отметить, что существует еще один способ встраивания параллельных задач в приложения .NET Core. При желании можно применять набор расширяющих методов, которые позволяют конструировать запрос LINQ, распределяющий свою рабочую нагрузку по параллельным потокам (когда это возможно). Соответственно запросы LINQ, которые спроектированы для параллельного выполнения, называются запросами Parallel LINQ (PLINQ).

Подобно параллельному коду, написанному с использованием класса Parallel, в PLINQ имеется опция игнорирования запроса на обработку коллекции параллельным образом, если понадобится. Инфраструктура PLINQ оптимизирована во многих отношениях, включая определение того, не будет ли запрос на самом деле более эффективно выполняться в синхронной манере.

Во время выполнения PLINQ анализирует общую структуру запроса, и если есть вероятность, что запрос выиграет от распараллеливания, то он будет выполняться параллельно. Однако если распараллеливание запроса ухудшит производительность, то PLINQ просто запустит запрос последовательно. Когда возникает выбор между потенциально затратным (в плане ресурсов) параллельным алгоритмом и экономным последовательным, предпочтение по умолчанию отдается последовательному алгоритму.

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

Необходимые расширяющие методы находятся в классе ParallelEnumerable из пространства имен System.Linq. В табл. 15.5 описаны некоторые полезные расширяющие методы PLINQ.

Чтобы взглянуть на PLINQ в действии, создайте проект консольного приложения по имени PLINQDataProcessingWithCancellation и импортируйте в него пространства имен System.Linq, System.Threading и System.Threading.Tasks (если это еще не сделано). После начала обработки запускается новая задача, выполняющая запрос LINQ, который просматривает крупный массив целых чисел в поиске элементов, удовлетворяющих условию, что остаток от их деления на 3 дает 0. Вот непараллельная версия такого запроса:

using System;

using System.Linq;

using System.Threading;

using System.Threading.Tasks;

Console.WriteLine("Start any key to start processing");

                // Нажмите любую клавишу, чтобы начать обработку

Console.ReadKey();

Console.WriteLine("Processing");

Task.Factory.StartNew(ProcessIntData);

Console.ReadLine();

void ProcessIntData()

{

  // Получить очень большой массив целых чисел.

  int[] source = Enumerable.Range(1, 10_000_000).ToArray();

  // Найти числа, для которых истинно условие num % 3 == О,

  // и возвратить их в убывающем порядке.

  int[] modThreeIsZero = (

    from num in source

    where num % 3 == 0

    orderby num descending

    select num).ToArray();

  // Вывести количество найденных чисел

  Console.WriteLine($"Found {modThreeIsZero.Count()} numbers

                      that match query!");

}

Создание запроса PLINQ

Чтобы проинформировать библиотеку TPL о выполнении запроса в параллельном режиме (если такое возможно), необходимо использовать расширяющий метод AsParallel():

Перейти на страницу:
Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.
Комментарии / Отзывы
    Ничего не найдено.