詳解C# parallel中并行計算的四種寫法總結(jié)
在C#中,parallel關鍵字用于并行計算。
在數(shù)據(jù)集的處理當中,我們需要針對每一行來進行處理,行之間沒有關聯(lián),這個時候就可以應用并行處理來增加程序的靈活性。
在字典、列表或者數(shù)據(jù)集合當中也常見到這樣的應用。
下面列舉的是parallel應用的四種寫法。
效果圖
一般的循環(huán),結(jié)果就是同步循環(huán):
for (int i=0;i<12;i++) { textBox1.Text = textBox1.Text + $"循環(huán)數(shù):{i}" + Environment.NewLine; }
并行寫法1
Parallel.For(0, 12, i => { textBox2.BeginInvoke(() => { textBox2.Text = textBox2.Text + $"循環(huán)數(shù):{i}" + Environment.NewLine; }); });
并行寫法2
int[] x = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; Parallel.ForEach(x, i => { textBox3.BeginInvoke(() => { textBox3.Text = textBox3.Text + $"循環(huán)數(shù):{i}" + Environment.NewLine; }); });
并行寫法3
Parallel.Invoke( new Action(() => { for (int i = 0; i < 4; i++) { textBox4.BeginInvoke(() => { textBox4.Text = textBox4.Text + $"循環(huán)數(shù):{i},1-4" + Environment.NewLine; }); } }), new Action(() => { for (int i = 4; i < 8; i++) { textBox4.BeginInvoke(() => { textBox4.Text = textBox4.Text + $"循環(huán)數(shù):{i},4-8" + Environment.NewLine; }); } }), new Action(() => { for (int i = 8; i < 12; i++) { textBox4.BeginInvoke(() => { textBox4.Text = textBox4.Text + $"循環(huán)數(shù):{i},8-11" + Environment.NewLine; }); } }));
上面的寫法不明了,可以單獨寫成函數(shù)定義樣式:
private void func1() { for (int i = 0; i < 4; i++) { textBox4.BeginInvoke(() => { textBox4.Text = textBox4.Text + $"循環(huán)數(shù):{i},0-3" + Environment.NewLine; }); } } private void func2() { for (int i = 4; i < 8; i++) { textBox4.BeginInvoke(() => { textBox4.Text = textBox4.Text + $"循環(huán)數(shù):{i},4-7" + Environment.NewLine; }); } } private void func3() { for (int i = 8; i < 12; i++) { textBox4.BeginInvoke(() => { textBox4.Text = textBox4.Text + $"循環(huán)數(shù):{i},8-11" + Environment.NewLine; }); } }
然后調(diào)用,這樣看就清晰多了:
Parallel.Invoke(func1, func2, func3);
并行寫法4
int[] x = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; await Parallel.ForEachAsync(x,new ParallelOptions() { MaxDegreeOfParallelism=3},async (x,_) => { textBox4.BeginInvoke(async () => { textBox4.Text = textBox4.Text + $"循環(huán)數(shù):{x}" + Environment.NewLine; }); } );
實際編寫過程中,可以根據(jù)自己的喜好來使用這些語法糖。
到此這篇關于詳解C# parallel中并行計算的四種寫法總結(jié)的文章就介紹到這了,更多相關C# parallel并行計算內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Unity3D UI Text得分數(shù)字增加的實例代碼
這篇文章主要介紹了Unity3D UI Text得分數(shù)字增加方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04C#?OpenCvSharp?顏色反轉(zhuǎn)實例詳解
OpenCVSharp是OpenCV的.NET?wrapper,它比Emgucv更接近于原始的OpenCV,并且有很多的樣例參考,其采用LGPL發(fā)行,對商業(yè)應用友好(基本上相當于BSD),這篇文章主要介紹了C#?OpenCvSharp?顏色反轉(zhuǎn)的知識,需要的朋友可以參考下2024-02-02C# WinForm控件對透明圖片重疊時出現(xiàn)圖片不透明的簡單解決方法
這篇文章主要介紹了C# WinForm控件對透明圖片重疊時出現(xiàn)圖片不透明的簡單解決方法,結(jié)合實例形式分析了WinForm圖片重疊后造成圖片不透明的原因與相應的解決方法,需要的朋友可以參考下2016-06-06c# Bitmap轉(zhuǎn)bitmapImage高效方法
本文主要介紹了c# Bitmap轉(zhuǎn)bitmapImage高效方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11implicit關鍵字做自定義類型隱式轉(zhuǎn)換的方法
implicit 關鍵字用于聲明隱式的用戶定義類型轉(zhuǎn)換運算符。如果轉(zhuǎn)換過程可以確保不會造成數(shù)據(jù)丟失,則可使用該關鍵字在用戶定義類型和其他類型之間進行隱式轉(zhuǎn)換,這篇文章就給大家詳細介紹implicit關鍵字做自定義類型隱式轉(zhuǎn)換的方法,需要的朋友可以參考下2015-08-08