浅谈C#多线程下的调优_第1页
浅谈C#多线程下的调优_第2页
浅谈C#多线程下的调优_第3页
浅谈C#多线程下的调优_第4页
浅谈C#多线程下的调优_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第浅谈C#多线程下的调优//并行编程

Console.WriteLine($"并行编程开始,主线程Id:{Thread.CurrentThread.ManagedThreadId}");

Console.WriteLine("【示例1】");

//示例1:

//一次性执行1个或多个线程,效果类似:TaskWaitAll,只不过Parallel的主线程也参与了计算

Parallel.Invoke(

()={DoSomething("并行1-1");},

()={DoSomething("并行1-2");},

()={DoSomething("并行1-3");},

()={DoSomething("并行1-4");},

()={DoSomething("并行1-5");});

Console.WriteLine("*************并行结束************");

Console.ReadLine();

}

执行Test1结果:

示例2:

publicstaticvoidTest2()

//并行编程

Console.WriteLine($"并行编程开始,主线程Id:{Thread.CurrentThread.ManagedThreadId}");

Console.WriteLine("【示例2】");

//示例2:

//定义要执行的线程数量

Parallel.For(0,5,t=

inta=t;

DoSomething($"并行2-{a}");

Console.WriteLine("*************并行结束************");

Console.ReadLine();

}

结果:

示例3:

publicstaticvoidTest3()

//并行编程

Console.WriteLine($"并行编程开始,主线程Id:{Thread.CurrentThread.ManagedThreadId}");

Console.WriteLine("【示例3】");

ParallelOptionsoptions=newParallelOptions()

MaxDegreeOfParallelism=3//执行线程的最大并发数量,执行完成一个,就接着开启一个

//遍历集合,根据集合数量执行线程数量

Parallel.ForEach(newListstring{"a","b","c","d","e","f","g"},options,(t,status)=

//status.Break();//这一次结束。

//status.Stop();//整个Parallel结束掉,Break和Stop不可以共存

DoSomething($"并行4-{t}");

}

结果:分成3次并行

五、异步IO

1.异步IO于同步IO比较

异步IO在数据准备阶段不会阻塞主线程,而同步IO则会阻塞主线程。

2.异步读写文件

这里使用FileStream类,它带有一个参数useAsync,可以避免在许多情况下阻塞线程池的线程。可以通过useAsync=true来进行启用或在构造函数中进行参数调用。

但是我们不能对StreamReader和StreamWriter中的参数进行设置。但是,如果你想使用该参数useAsync,则需要自己新建一个FileStream对象。

请注意,异步调用是在UI中的,即使线程池线程阻塞,在await期间,用户界面线程也不会被阻塞。

异步写入文本

///summary

///异步写入文件

////summary

///returns/returns

publicasyncTaskWriteTextAsync()

varpath="temp.txt";//文件名

varcontent=Guid.NewGuid().ToString();//写入内容

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);

}

执行完查看根目录文件结果:

异步读取文件

///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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论