因项目响应过慢,代码优化空间不大,在暂时无法调整系统架构的情况下,只有使用.NET中的TPL解决一些模块耗时过多的问题。但在使用过程中也碰到了一些问题,现在把它写下来,用于备忘。

1. Parallel.ForEach的使用

         static void Main(string[] args)
{
//Test();
TestParllel();
Console.ReadLine();
} private static void TestParllel()
{
var list = new List<int>(); for (int i = ; i < ; i++)
{
list.Add(i);
}
Parallel.ForEach(list, (p, state) => { Invoke(p); });
} static void Invoke(int i)
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
Thread.Sleep();
}

未设置最大线程数的情况下:

a>为设置最大线程的情况下,TPL默认线程数为任务数(系统允许的情况下,设置ThreadPool.SetMaxThreads没有效果)。

b> TPL默认启动5个线程,任务数小于5的话,启动任务数个线程。

c> 如果任务较多,TPL在初始化5个线程后,每隔100毫秒左右新增线程,直到达到最大线程数。如果新增线程的过程中有任务完成,那么就不会新增线程。

缺点:线程数无法控制,容易造成高CPU,系统失去响应。

设置了最大线程数的情况下:

        private static void TestParllel()
{
var list = new List<int>(); for (int i = ; i < ; i++)
{
list.Add(i);
}
Parallel.ForEach(list, new ParallelOptions { MaxDegreeOfParallelism = }, (p, state) => { Invoke(p); });
}

设置了最大线程数为2

a> 系统运行可控,不会造成高CPU的情况。

最新文章

  1. PowerDesigner修改生成mysql视图
  2. 自动生成build.xml文件
  3. jQueryEasyUi验证
  4. SPSS数据分析——t检验
  5. dede 替换后台两个文件去广告
  6. eclipse mybatis Generator
  7. IOS 项目名称修改(XCODE4.6)
  8. 一个基于Qt的截屏程序
  9. Android运用自己的标题栏
  10. Windows下多线程数据同步互斥的有关知识
  11. Windows Essentials Movie Maker 安装失败报错 ——问题解决
  12. web安全测试排查
  13. 一、I/O操作(中文问题)
  14. python模块之xlwt
  15. Atitit jquery &#160;1.4--v1.11 &#160;v1.12 &#160;v2.0 &#160;3.0 的新特性
  16. jQuery ajax的前台代码编写
  17. JAVA JDBC 简单的增删改查
  18. 吴裕雄 数据挖掘与分析案例实战(14)——Kmeans聚类分析
  19. scrapy-yield scrapy.Request()不执行、失效、Filtered offsite request to错误 [转]
  20. mysql 允许远程登录

热门文章

  1. Canvas标签基础
  2. 【调优】Nginx性能调优
  3. 兼容安卓和ios实现一键复制内容到剪切板
  4. EOJ Monthly 2018.11 猜价格 (模拟)
  5. 浅谈EM算法的两个理解角度
  6. Instruments(性能调优 12.3)
  7. Java HTTP通信--Get与POST请求
  8. caffe 中base_lr、weight_decay、lr_mult、decay_mult代表什么意思?
  9. quartz-job实现实时或定时发送短信任务
  10. MyEclipse2014+JDK1.7+Tomcat8.0+Maven3.2 开发环境搭建