• Csharp: Parallel LINQ


    https://devtut.github.io/csharp/parallel-linq-plinq.html#simple-example
    https://github.com/PacktPublishing/Hands-On-Parallel-Programming-with-C-8-and-.NET-Core-3.0
    https://gist.github.com/gfoidl/d8250ff11a5c70972cb8164622792ba1
    https://github.com/lassevk/ObjectDumper
    https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/order-preservation-in-plinq
    LINQPad
    https://github.com/giawa/RedPandaOS
    http://www.albahari.com/nutshell/E9-CH22.aspx
    https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10
    https://github.com/WolfgangOfner/CSharp-9.0/tree/master/CSharp9
    https://github.com/apress/beg-cpp
    https://github.com/Apress/beginning-cpp20
    https://github.com/packtpublishing/beginning-cpp-programming

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Collections;
    using System.Linq.Expressions;
    using System.IO;
    using System.Net;
    using System.Threading;
    using System.Threading.Tasks;
    using Newtonsoft.Json;
    
    
    //https://devtut.github.io/csharp/parallel-linq-plinq.html#simple-example
    /// <summary>
    /// geovindu 涂聚文 Geovin Du
    /// </summary>
    public partial class _Default : Page
    {
    
    
    
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            var sequence = Enumerable.Range(1, 10000).Select(x => -1 * x); // -1, -2, ...
            var evenNumbers = sequence.AsParallel()
                                      .OrderBy(x => x)
                                      .Take(5000)
                                      .AsUnordered()
                                      .Where(x => x % 2 == 0) // This line won't be affected by ordering
                                      .ToList();
    
    
            string wordLookupFile = Path.Combine(Path.GetTempPath(), "WordLookup.txt");
    
            if (!File.Exists(wordLookupFile))    // Contains about 150,000 words
                new WebClient().DownloadFile(
                  "http://www.dusystem.com/allwords.txt", wordLookupFile);
    
            var wordLookup = new HashSet<string>(
              File.ReadAllLines(wordLookupFile),
              StringComparer.InvariantCultureIgnoreCase);
    
            string[] wordList = wordLookup.ToArray();
    
            // Here, we're using ThreadLocal to generate a thread-safe random number generator,
            // so we can parallelize the building of the wordsToTest array.
            var localRandom = new ThreadLocal<Random>
              (() => new Random(Guid.NewGuid().GetHashCode()));
    
            string[] wordsToTest = Enumerable.Range(0, 1000000).AsParallel()
              .Select(i => wordList[localRandom.Value.Next(0, wordList.Length)])
              .ToArray();
    
            wordsToTest[12345] = "woozsh";     // Introduce a couple
            wordsToTest[23456] = "wubsie";     // of spelling mistakes.
    
            var query = wordsToTest
              .AsParallel()
              .Select((word, index) => new IndexedWord { Word = word, Index = index })
              .Where(iword => !wordLookup.Contains(iword.Word))
              .OrderBy(iword => iword.Index);
    
            query.Dump();  //Dump
    
    
    
            string text = "Let’s suppose this is a really long string";
    
            int[] result =
              text.AsParallel().Aggregate(
                () => new int[26],             // Create a new local accumulator
    
                (localFrequencies, c) =>       // Aggregate into the local accumulator
        {
                    int index = char.ToUpper(c) - 'A';
                    if (index >= 0 && index <= 26) localFrequencies[index]++;
                    return localFrequencies;
                },
                // Aggregate local->main accumulator
                (mainFreq, localFreq) =>
                  mainFreq.Zip(localFreq, (f1, f2) => f1 + f2).ToArray(),
    
                finalResult => finalResult     // Perform any final transformation
              );                                 // on the end result.
    
            result.Dump();
    
    
            Parallel.ForEach(GetPokemon().OrderBy(p => p.Name), (p,s) =>
            {
                Response.Write(String.Format("Changing owner for {0} <br/>", p.Name));
                p.Owner = "Aaron";
            });
    
            Parallel.ForEach(GetPokemon().OrderBy(p => p.Name), (p, s, i) =>
            {
                Response.Write(String.Format("{0}. Changing owner for: {1}<br/>",i,p.Name));
                p.Owner = "Aaron";
            });
    
            GetPokemon().OrderBy(p => p.Name).AsParallel().ForAll((p) =>
            {
                Response.Write(String.Format("Changing owner for Du Name: {0}<br/>", p.Name));
                p.Owner = "Aaron";
            });
    
    
        }
        static IEnumerable<Pokemon> GetPokemon() => new List<Pokemon>
        {
            new Pokemon("Pikachu", "Electric", "Ash"),
            new Pokemon("Bulbasaur", "Grass", "Ash"),
            new Pokemon("Squirtle", "Water", "Ash"),
            new Pokemon("Charmander", "Fire", "Aaron"),
            new Pokemon("Gengar", "Ghost", "Ash"),
            new Pokemon("Snorlax", "Normal", "Ash"),
            new Pokemon("Geovin Du", "Psychic", "Ash"),
        };
    
    
        struct IndexedWord { public string Word; public int Index; }   
    
    
    }
    
    /// <summary>
    /// 
    /// </summary>
    public static class Dumper
    {
        public static string ToPrettyString(this object value)
        {
            return JsonConvert.SerializeObject(value, Formatting.Indented);
        }
    
        public static T Dump<T>(this T value)
        {
            Console.WriteLine(value.ToPrettyString());
            return value;
        }
    }
    
    /// <summary>
    /// 
    /// </summary>
    public class Pokemon
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="name"></param>
        /// <param name="type"></param>
        /// <param name="owner"></param>
        public Pokemon(string name, string type, string owner)
        {
            Name = name;
            Type = type;
            Owner = owner;
        }
        /// <summary>
        /// 
        /// </summary>
        public string Name { get; set; }
    
        /// <summary>
        /// 
        /// </summary>
        public string Type { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public string Owner { get; set; }
    }
    
    哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)成功.---Geovin Du(涂聚文)
  • 相关阅读:
    .NET 4.0 中的契约式编程
    DELL安装Windows Server 2019
    Mysql 5.7.34免安装版本
    MQTT
    WPF属性
    WPF数据绑定
    git系列之(五)git stash 命令
    Vue.js
    git 对比两个分支差异
    TPL 之二 TransformBlock
  • 原文地址:https://www.cnblogs.com/geovindu/p/15781348.html
Copyright © 2020-2023  润新知