LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C#并行编程极大提升集合处理速度

admin
2025年4月27日 15:52 本文热度 136

我们在开发C#程序的时候,有时候遇到一些非常多的数据需要处理,尤其是我们要对一个集合中的数据做相同操作,这个集合中又包含了多个数据,我们一般使用for循环对集合中的每个数据分别处理,这样处理起来可能需要花费很多的时间,那么有没有能够优化这个处理时间的方法呢,本文就来帮助大家解决这个问题!

1、传统foreach循环处理

下面的代码中使用Initialtest方法首先从本地读取一个文件名叫 "苹果.jpeg"的图像,然后使用gdi技术复制这个图像200遍,然后把这200个图像存到ImageParamList 这个集合中,然后我们把这200个图像保存到本地电脑中,由于图像数据比较多,所以保存起来的速度比较慢,比如我这里定义了一个SavaImage方法,该方法使用foreach循环将ImageParamList 集合中200个图像分别保存,在我的电脑上使用了差不多20秒,

 public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();            Initialtest();        }

        private void Initialtest()        {            List<ImageParam> ImageParamList = new List<ImageParam>();
            for (int i = 0; i < 200; i++)            {                string fileName = "苹果.jpeg";                using (FileStream fs = new FileStream(fileName, FileMode.Open))                {                    ImageParam imageParam = new ImageParam();                    Bitmap bitmap = new Bitmap(fs);
                    Bitmap newBitmap = new Bitmap(bitmap.Width, bitmap.Height);                    Graphics g = Graphics.FromImage(newBitmap);                    g.DrawImage(bitmap, new Point(00));                    bitmap.Dispose();
                    imageParam.Index = i;                    imageParam.img = newBitmap;                    ImageParamList.Add(imageParam);                }            }
            DateTime startTime = DateTime.Now;            SavaImage(ImageParamList);            DateTime endTime = DateTime.Now;            double diffTime = (endTime - startTime).TotalMilliseconds;            Console.WriteLine(diffTime);        }
        private void SavaImage(List<ImageParam> ImageParamList)        {            foreach (var item in ImageParamList)            {                string fileName = $"{item.Index }.bmp";
                item.img.Save(fileName);            }        }    }

    class ImageParam    {        public int Index { getset; }
        public Bitmap img;    }

2、并行处理

为了加快图像保存的速度,我们使用C#中的并行计算功能,所谓并行计算在C#中其实使用了多个线程同时对集合中的数据进行处理,这样能够充分利用电脑资源来加速对集合数据的处理,我这里定义了一个SavaImageParallel方法,对集合调用AsParallel().ForAll(),这个ForAll里面传入的是一个委托,这样就能实现并行处理,经过实际测试SavaImageParallel方法使用并行处理后,200个图像存储到本地只需要3秒,快了7倍左右,堪称程序性能优化的神器,兄弟们快在项目中用起来吧!

 private void SavaImageParallel(List<ImageParam> ImageParamList)    {        ImageParamList.AsParallel().ForAll(item => {            string fileName = $"{item.Index }.bmp";            item.img.Save(fileName);        });    }


该文章在 2025/4/27 18:38:19 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved