下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第淺談C#多線程下的調(diào)優(yōu)//并行編程
Console.WriteLine($"并行編程開始,主線程Id:{Thread.CurrentThread.ManagedThreadId}");
Console.WriteLine("【示例1】");
//示例1:
//一次性執(zhí)行1個(gè)或多個(gè)線程,效果類似:TaskWaitAll,只不過Parallel的主線程也參與了計(jì)算
Parallel.Invoke(
()={DoSomething("并行1-1");},
()={DoSomething("并行1-2");},
()={DoSomething("并行1-3");},
()={DoSomething("并行1-4");},
()={DoSomething("并行1-5");});
Console.WriteLine("*************并行結(jié)束************");
Console.ReadLine();
}
執(zhí)行Test1結(jié)果:
示例2:
publicstaticvoidTest2()
//并行編程
Console.WriteLine($"并行編程開始,主線程Id:{Thread.CurrentThread.ManagedThreadId}");
Console.WriteLine("【示例2】");
//示例2:
//定義要執(zhí)行的線程數(shù)量
Parallel.For(0,5,t=
inta=t;
DoSomething($"并行2-{a}");
Console.WriteLine("*************并行結(jié)束************");
Console.ReadLine();
}
結(jié)果:
示例3:
publicstaticvoidTest3()
//并行編程
Console.WriteLine($"并行編程開始,主線程Id:{Thread.CurrentThread.ManagedThreadId}");
Console.WriteLine("【示例3】");
ParallelOptionsoptions=newParallelOptions()
MaxDegreeOfParallelism=3//執(zhí)行線程的最大并發(fā)數(shù)量,執(zhí)行完成一個(gè),就接著開啟一個(gè)
//遍歷集合,根據(jù)集合數(shù)量執(zhí)行線程數(shù)量
Parallel.ForEach(newListstring{"a","b","c","d","e","f","g"},options,(t,status)=
//status.Break();//這一次結(jié)束。
//status.Stop();//整個(gè)Parallel結(jié)束掉,Break和Stop不可以共存
DoSomething($"并行4-{t}");
}
結(jié)果:分成3次并行
五、異步IO
1.異步IO于同步IO比較
異步IO在數(shù)據(jù)準(zhǔn)備階段不會阻塞主線程,而同步IO則會阻塞主線程。
2.異步讀寫文件
這里使用FileStream類,它帶有一個(gè)參數(shù)useAsync,可以避免在許多情況下阻塞線程池的線程??梢酝ㄟ^useAsync=true來進(jìn)行啟用或在構(gòu)造函數(shù)中進(jìn)行參數(shù)調(diào)用。
但是我們不能對StreamReader和StreamWriter中的參數(shù)進(jìn)行設(shè)置。但是,如果你想使用該參數(shù)useAsync,則需要自己新建一個(gè)FileStream對象。
請注意,異步調(diào)用是在UI中的,即使線程池線程阻塞,在await期間,用戶界面線程也不會被阻塞。
異步寫入文本
///summary
///異步寫入文件
////summary
///returns/returns
publicasyncTaskWriteTextAsync()
varpath="temp.txt";//文件名
varcontent=Guid.NewGuid().ToString();//寫入內(nèi)容
using(varfs=newFileStream(path,FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.None,bufferSize:4096,useAsync:true))
varbuffer=Encoding.UTF8.GetBytes(content);
awaitfs.WriteAsync(buffer,0,buffer.Length);
}
執(zhí)行完查看根目錄文件結(jié)果:
異步讀取文件
///summary
///異步讀取文本
////summary
///returns/returns
publicstaticasyncTaskReadTextAsync()
varfileName="temp.txt";//文件名
using(varfs=newFileStream(fileName,
FileMode.OpenOrCreate,FileAccess.Read,FileShare.None,bufferSize:4096,useAsync:true))
varsb=newStringBuilder();
varbuffer=newbyte[4096];
varreadLength=0;
while((readLength=awaitfs.ReadAsync(buffer,0,buffer.Length))!=0)
vartext=Encoding.UTF8.GetString(buffer,0,readLength);
sb.Append(text);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 復(fù)工培訓(xùn)教育制度
- 嚴(yán)格建筑工人培訓(xùn)制度
- 護(hù)士藥物培訓(xùn)制度
- 集團(tuán)員工培訓(xùn)制度
- 管理人員下基層培訓(xùn)制度
- 汽車維修部人員培訓(xùn)制度
- 培訓(xùn)經(jīng)費(fèi)保障制度
- 報(bào)廢機(jī)動(dòng)車培訓(xùn)上崗制度
- 廚房生產(chǎn)安全培訓(xùn)制度
- 掛職干部培訓(xùn)制度
- 智能家居銷售培訓(xùn)課件
- 2025-2026學(xué)年小學(xué)蘇少版(2024)新教材一年級上冊美術(shù)期末測試卷及答案
- 2025-2026學(xué)年北師大版六年級數(shù)學(xué)上冊期末測試卷及答案
- 不同類型休克的床旁超聲鑒別診斷策略
- 企業(yè)ESG審計(jì)體系構(gòu)建-洞察及研究
- 政治理論考試試題庫100題
- 物業(yè)與商戶裝修協(xié)議書
- 2025年信用報(bào)告征信報(bào)告詳版?zhèn)€人版模板樣板(可編輯)
- 急診科心肌梗死搶救流程
- 小學(xué)三年級數(shù)學(xué)選擇題專項(xiàng)測試100題帶答案
評論
0/150
提交評論