超碰人人人人人,亚洲AV午夜福利精品一区二区,亚洲欧美综合区丁香五月1区,日韩欧美亚洲系列

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#并行編程極大提升集合處理速度

admin
2025年4月27日 15:52 本文熱度 635

我們?cè)陂_(kāi)發(fā)C#程序的時(shí)候,有時(shí)候遇到一些非常多的數(shù)據(jù)需要處理,尤其是我們要對(duì)一個(gè)集合中的數(shù)據(jù)做相同操作,這個(gè)集合中又包含了多個(gè)數(shù)據(jù),我們一般使用for循環(huán)對(duì)集合中的每個(gè)數(shù)據(jù)分別處理,這樣處理起來(lái)可能需要花費(fèi)很多的時(shí)間,那么有沒(méi)有能夠優(yōu)化這個(gè)處理時(shí)間的方法呢,本文就來(lái)幫助大家解決這個(gè)問(wèn)題!

1、傳統(tǒng)foreach循環(huán)處理

下面的代碼中使用Initialtest方法首先從本地讀取一個(gè)文件名叫 "蘋(píng)果.jpeg"的圖像,然后使用gdi技術(shù)復(fù)制這個(gè)圖像200遍,然后把這200個(gè)圖像存到ImageParamList 這個(gè)集合中,然后我們把這200個(gè)圖像保存到本地電腦中,由于圖像數(shù)據(jù)比較多,所以保存起來(lái)的速度比較慢,比如我這里定義了一個(gè)SavaImage方法,該方法使用foreach循環(huán)將ImageParamList 集合中200個(gè)圖像分別保存,在我的電腦上使用了差不多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 = "蘋(píng)果.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#中的并行計(jì)算功能,所謂并行計(jì)算在C#中其實(shí)使用了多個(gè)線程同時(shí)對(duì)集合中的數(shù)據(jù)進(jìn)行處理,這樣能夠充分利用電腦資源來(lái)加速對(duì)集合數(shù)據(jù)的處理,我這里定義了一個(gè)SavaImageParallel方法,對(duì)集合調(diào)用AsParallel().ForAll(),這個(gè)ForAll里面?zhèn)魅氲氖且粋€(gè)委托,這樣就能實(shí)現(xiàn)并行處理,經(jīng)過(guò)實(shí)際測(cè)試SavaImageParallel方法使用并行處理后,200個(gè)圖像存儲(chǔ)到本地只需要3秒,快了7倍左右,堪稱(chēng)程序性能優(yōu)化的神器,兄弟們快在項(xiàng)目中用起來(lái)吧!

 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 編輯過(guò)
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶(hù)的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved