因为有个for 实际执行结果尽管是按照for里边的顺序执行,但处理器让哪个分线程先执行,谁先处理完就不一定了.

对于要求结果需要先后顺序的,比如对text内容的操作, 用并行 Parallel.For 操作,不做进一步优化处理,那结果就不是想要的了,还要l用它的并行的功能所以要多程序进行改进,

我使用的做法是初始化buffer list 把list数组的顺序定下来,在循环中,把对应的值顺序赋值给list.    这样做可能写的有点死,根据实际应用调整启动循环的数量实际运行起来效果不错.

做了个简单的测试,同时赋值多个字符串,打印list字符串的值,

 string a = "sssssssssssssssssssssssssssssssssssssssssss";string b = "jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj";string c = "nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmmm";string d = "ssssssssssssssssssssssssssssssssssssssssssssssssss";string o = "hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh";string f = "ttttttttttttttttttttttttttttttttttttttttttttttttttt";List<string> la = new List<string>();la.Add(a);la.Add(b);la.Add(c);la.Add(d);la.Add(o);la.Add(f);Parallel.For(0, 6 /*portion*/, (i, ParallelLoopState) =>{Console.WriteLine(la[i]) ;});

结果:

顺序大变

再运行一次

因为设置断点,程序停了一会显示按照先后了

在运行一次,去掉断点

总结:对需要先后顺序的操作明显满足不了

本来已经加上一下代码就可以了

                  if (i == 0){using (mmf_reader = mmf.CreateViewAccessor(0, portion1, MemoryMappedFileAccess.Read)){buffer = new byte[portion1];mmf_reader.ReadArray(0, buffer, 0, (int)portion1);mappedFiles.Add(new MappedFile{Offset =/* i **/ portion1, //fileOffset,  Buffer = buffer,FileSize = portion1});}}else if (i == 1){using (mmf_reader = mmf.CreateViewAccessor(portion1, portion2 - portion1, MemoryMappedFileAccess.Read)){buffer = new byte[portion2 - portion1];mmf_reader.ReadArray(0, buffer, 0, (int)(portion2 - portion1));mappedFiles.Add(new MappedFile{Offset = portion1 + portion2,// i * portionSize, //fileOffset,  Buffer = buffer,FileSize = portion2 - portion1});}}else if (i == 2){using (mmf_reader = mmf.CreateViewAccessor(portion2, portion3 - portion2, MemoryMappedFileAccess.Read)){buffer = new byte[portion3 - portion2];mmf_reader.ReadArray(0, buffer, 0, (int)(portion3 - portion2));mappedFiles.Add(new MappedFile{Offset = portion3 + portion2,// i * portionSize, //fileOffset,  Buffer = buffer,FileSize = portion3 - portion2});}}else if (i == 3){using (mmf_reader = mmf.CreateViewAccessor(portion2, portion3 - portion2, MemoryMappedFileAccess.Read)){buffer = new byte[portion3 - portion2];mmf_reader.ReadArray(0, buffer, 0, (int)(portion3 - portion2));mappedFiles.Add(new MappedFile{Offset = portion3 + portion2,// i * portionSize, //fileOffset,  Buffer = buffer,FileSize = portion3 - portion2});}}else if (i == 4){using (mmf_reader = mmf.CreateViewAccessor(portion3, portion4 - portion3, MemoryMappedFileAccess.Read)){buffer = new byte[portion4 - portion3];mmf_reader.ReadArray(0, buffer, 0, (int)(portion4 - portion3));mappedFiles.Add(new MappedFile{Offset = portion3 + portion2,// i * portionSize, //fileOffset,  Buffer = buffer,FileSize = portion4 - portion3});}}else if (i == 5){using (mmf_reader = mmf.CreateViewAccessor(portion4, portion5 - portion4, MemoryMappedFileAccess.Read)){buffer = new byte[portion5 - portion4];mmf_reader.ReadArray(0, buffer, 0, (int)(portion5 - portion4));mappedFiles.Add(new MappedFile{Offset = portion3 + portion2,// i * portionSize, //fileOffset,  Buffer = buffer,FileSize = portion5 - portion4});}}}

以上尽管值加进去了,里边顺序还是变了并行线程用起来还是有些复杂度的,

对以上

mappedFiles 先初始化 ,
 mappedFiles = new List<MappedFile>();//初始化 list 六个for (int i = 0; i < 6; i++){MappedFile map = new MappedFile();mappedFiles.Add(map);

mappedFiles[0]=new MappedFile
{
// Offset =/* i **/ portion1, //fileOffset,
Buffer = buffer,
// FileSize = portion1
};  

不用list.add的方式,直接赋值方式.问题解决

 

转载于:https://www.cnblogs.com/zuochanzi/p/7365632.html

c# Parallel.For 并行编程 执行顺序测试相关推荐

  1. Unity脚本在层级面板中的执行顺序测试3

    断断续续的写了3篇,以后有时间可以做成一个系列了 前面2篇测试了GameObject的顺序,以及Awake和OnEnable的时机: Unity脚本在层级面板中的执行顺序测试1 http://www. ...

  2. java代码块执行顺序_Java笔记 | Java代码块执行顺序测试

    最近笔试常常遇到考察Java代码块执行顺序的题目,网上查看博客错漏百出,特地自己测试了一下. 如有错漏,希望路过的大佬指出来,以便我进行更改. 先上代码吧! public class ClassA { ...

  3. try catch嵌套执行顺序测试

    分享一段测试try catch 执行顺序和那些代码后续执行,那么不执行的代码: @Testpublic void testTryCatch(){try {System.out.println(&quo ...

  4. python的socket编程执行顺序_Python篇-Socket网络编程

    TZ:多读英文,少点烦躁 一 : 科普一分钟 简单来说Socket就是对TCP/IP等网络协议的封装和应用,其重要的两个动作就是发送和接受当我们需要调用网络连接时只需建立Socket连接,Socket ...

  5. dnet 并行编程学习总结

    .Net并行编程高级教程--Parallel http://www.cnblogs.com/stoneniqiu/p/4857021.html 一直觉得自己对并发了解不够深入,特别是看了<代码整 ...

  6. C# 学习笔记——PL 并行编程 TPL 和传统 .NET 异步编程

    C# 学习笔记--PL 并行编程 TPL 和传统 .NET 异步编程 Task C# 多线程和异步模型 TPL模型 Task,异步,多线程简单总结 1,如何把一个异步封装为Task异步 Task.Fa ...

  7. C#并发编程之初识并行编程

    写在前面 之前微信公众号里有一位叫sara的朋友建议我写一下Parallel的相关内容,因为手中商城的重构工作量较大,一时之间无法抽出时间.近日,这套系统已有阶段性成果,所以准备写一下Parallel ...

  8. C#并行编程-并发集合

    菜鸟学习并行编程,参考<C#并行编程高级教程.PDF>,如有错误,欢迎指正. 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 ...

  9. Java普通代码块,构造代码块,静态代码块区别,执行顺序的代码实例

    Java普通代码块,构造代码块,静态代码块区别,执行顺序的代码实例 2018年05月08日 08:12:48 WJN不忘初心 阅读数:34 除了说普通代码块,静态代码块,构造代码块的执行顺序外,还有静 ...

最新文章

  1. Openreach与华为/诺基亚签署G.fast协议
  2. android开发学习 ------- MongoDB数据库简单理解
  3. 微信小程序制作-随笔2
  4. 操作系统原理: 计算机的体系结构、内存的层次结构 、地址的生成
  5. upload-labs_pass20-move_uploaded_file函数特性
  6. 君威u0073故障码解决_格力多联机同时报三个故障“U2”“L0”“d9”怎么修?
  7. 7年赚出两个阿里加两个腾讯,他是地表最强打工人!
  8. MSSQL日期格式转换函数(使用CONVERT)
  9. 如何验证远程服务器上文件是否存在
  10. 初来咋到,要想在此安家,先要共享3500份课后答案
  11. 计算机网络系统是由计算机系统,计算机网络由哪几部分组成?
  12. 知道SG函数是干什么的
  13. BootStrap3 排版
  14. UIKit框架的介绍
  15. 要运行python程序要安装什么_求你要我(2)
  16. Unity3DCPU优化方法相关理论知识
  17. Windows 11答疑:大家最关心的10个问题
  18. 邮箱无法登陆的解决方法
  19. highcharts画线性图示例
  20. 监控(monitor)和可观测性(Observability)

热门文章

  1. spring核心:bean工厂的装配 6
  2. numpy 点乘_斯坦福CS217(六)Spatial点乘示例
  3. 医学工作者如何进行医学科研设计?
  4. Spring(三)——HelloSpring、IOC创建对象的方式、属性注入、自动装配、使用注解开发
  5. mooc北京大学python_实用Python程序设计
  6. 虚拟机登服务器,用虚拟机登录云服务器
  7. 嘉宾及议程速览,第四范式2021发布会进入一周倒计时
  8. Java基础day12
  9. numpy(3)-numpy.random.random() ,random_sample()连续均匀分布
  10. 【深度学习】小目标检测、图像分类、图像识别等开源数据集汇总