Plinq-Parallel.ForEach for 性能提升

https://msdn.microsoft.com/zh-cn/library/dd460720.aspx

本示例显示如何使用 Parallel.ForEach 循环对任何 System.Collections.IEnumerable 或 System.Collections.Generic.IEnumerable<T> 数据源启用数据并行。

注意

本文档使用 lambda 表达式在 PLINQ 中定义委托。  如果您不熟悉 C# 或 Visual Basic 中的 lambda 表达式,请参见 Lambda Expressions in PLINQ and TPL

示例

C#

VB

//
// IMPORTANT!!!: Add a reference to System.Drawing.dll
using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using System.Drawing;

public class Example
{
    public static void Main()
    {
        // A simple source for demonstration purposes. Modify this path as necessary.
        String[] files = System.IO.Directory.GetFiles(@"C:\Users\Public\Pictures\Sample Pictures", "*.jpg");
        String newDir = @"C:\Users\Public\Pictures\Sample Pictures\Modified";
        System.IO.Directory.CreateDirectory(newDir);

        // Method signature: Parallel.ForEach(IEnumerable<TSource> source, Action<TSource> body)
        // Be sure to add a reference to System.Drawing.dll.
        Parallel.ForEach(files, (currentFile) =>
                                {
                                    // The more computational work you do here, the greater
                                    // the speedup compared to a sequential foreach loop.
                                    String filename = System.IO.Path.GetFileName(currentFile);
                                    var bitmap = new Bitmap(currentFile);

                                    bitmap.RotateFlip(RotateFlipType.Rotate180FlipNone);
                                    bitmap.Save(Path.Combine(newDir, filename));

                                    // Peek behind the scenes to see how work is parallelized.
                                    // But be aware: Thread contention for the Console slows down parallel loops!!!

                                    Console.WriteLine("Processing {0} on thread {1}", filename, Thread.CurrentThread.ManagedThreadId);
                                    //close lambda expression and method invocation
                                });

        // Keep the console window open in debug mode.
        Console.WriteLine("Processing complete. Press any key to exit.");
        Console.ReadKey();
    }
}下面设置了最大的并发线程数
private static void TParllel()
        {
            var list = new List<int>(16000);

            for (int i = 0; i < 16000; i++)
            {
                list.Add(i);
            }
            Parallel.ForEach(list, new ParallelOptions { MaxDegreeOfParallelism = 200}, (p, state) => { Invoke(p); });
        }

http://www.cnblogs.com/huangxincheng/archive/2012/04/02/2429543.html

时间: 2024-11-01 17:09:37

Plinq-Parallel.ForEach for 性能提升的相关文章

oracle 11g亿级复杂SQL优化一例(数量级性能提升)

自从16年之后,因为工作原因,项目中就没有再使用oracle了,最近最近支持一个项目,又要开始负责这块事情了.最近在跑性能测试,配置全部调好之后,不少sql还存在性能低下的问题,主要涉及执行计划的不合理,以及相关pga隐含参数的优化.可能因为几年不接触的原因,略微有些生疏需要review了.这里以最近优化过的某个比较典型的例子为例(这里只讲思路.因为涉及到核心机密,不给出最终结果,16C [email protected]/45GB内存/fio 85/15 iops 8500/1500 配置,优

何时使用 Parallel.ForEach,何时使用 PLINQ

翻译自:When Should I Use Parallel.ForEach? When Should I Use PLINQ? 原作者: Pamela Vagata, Parallel Computing Platform Group, Microsoft Corporation 原文pdf:http://download.csdn.net/detail/sqlchen/7509513 ======================================================

C#多线程 为多核处理器而生的多线程方法Parallel.For和Parallel.ForEach

1.在.net4.0中,有了一个新的类库:任务并行库.它极大地简化了并行编程且内容丰富.这里仅介绍其中最简单的 Parallel.For循环和Parallel.ForEach循环.它们位于System.Threading.Tasks命名空间.它们是两个方法,这两个方法将迭代分别放在不同的处理器上并行处理,如果机器是多处理器或多核处理器,这样就会使性能大大提升. 2.例子用Parallel.For做计算,为数组赋值并打印,用Parallel.ForEach计算字符串数组每个元素的长度,运行结果:

Parallel.Foreach的全部知识要点【转】

简介 当需要为多核机器进行优化的时候,最好先检查下你的程序是否有处理能够分割开来进行并行处理.(例如,有一个巨大的数据集合,其中的元素需要一个一个进行彼此独立的耗时计算). .net framework 4 中提供了 Parallel.ForEach 和 PLINQ 来帮助我们进行并行处理,本文探讨这两者的差别及适用的场景. Parallel.ForEach Parallel.ForEach 是 foreach 的多线程实现,他们都能对 IEnumerable<T> 类型对象进行遍历,Para

ASP.NET页面优化性能提升方法记录

今天与大家分享:一种优化页面执行速度的方法.采用这个方法,可以使用页面的执行速度获得[8倍]的提升效果. 为了让您对优化的效果有个直观的了解,我准备了下面的测试结果截图: 测试环境:1. Windows Server 2003 SP22. Viaual Studio 2008,使用自带的WebDev.WebServer.EXE运行网站程序.3. (ThinkPad SL510):Core2 T6670 2.2GHz, 4G内存 二个红框中的数字反映了优化前后的执行时间.数字表明:优化前后,执行时

网页渲染优化和JS性能提升

自学前端有一段时间了,在网上学习总结了点网页的渲染性能和JS性能提升的方法,有利于写出更加优秀的代码 1. 不要使用GIF图片实现loading效果,这样会降低CPU消耗: 2. 禁止使用iframe,会阻塞父文档onload事件:搜索引擎的检索程序无法解读这种页面,不利于SEO: 3. 使用CSS3代码替代JS动画,尽可能避免重绘重排以及回流: 4. 对于一些小图标,可以使用base64位编码,以减少网络请求: 5. 网页Gzip,CDN托管,data缓存 ,图片服务器: 6. 前端模板 JS

Atitit.h5 web webview性能提升解决方案-----fileStrore缓存离线存储+http方案

1. 业务场景 android+webview h5 css背景图性能提升1 2. 根据标准,到目前为止,H5 一共有6种缓存机制,有些是之前已有,有些是 H5 才新加入的.1 2.1. 各种方案的比较,如下图2 3. Attilax的解决之道 file 缓存+http3 3.1. 图片的下载3 3.2. Jsbridge 4android5 3.3. http协议6 4. 参考8 1. 业务场景 android+webview h5 css背景图性能提升 图片的缓存大概儿需要500m的规模..

数据库数据处理性能提升技术

数据库数据处理性能提升技术 Java程序员在用的大数据工具,MongoDB稳居第一!

老nginx集群向tengine集群的升级改造,性能提升数倍

集群服务器使用nginx+fpm(php)的结构,这种结构的性能很大程度的瓶颈在fpm这一层,随着业务发展,访问量的增加,为了保证用户体验,我们在通过各种手段去提升集群的吞吐量和服务质量--机器扩容.业务分池.MC/REDIS的local化等等,做下来看到的效果是明显的,不过量级上的提升还是迫切需要,于是想到了在web服务器上在下下功夫,集群使用的nginx版本有点历史,版本就不说了,不过一直跑的都很健壮,所以没从想过更换,一个简单的事情促使我想测试更换为tengine,那就是worker进程数