星空网 > 软件开发 > ASP.net

基础才是重中之重~多线程的代价~我的内存都被吃了!

回到目录

异步操作是.net4.5推出的新名词,事实上,这东西早就有了,它归根结底是通过线程池来实现的,即将一个大任务分成多个小任何块,每个线程并行处理其中的一个,完成后再把结果告诉主线程,在.net4.5推出后,这种技术得到了封装,让开发人员实现起来更加方便了,但是,并发(导步,多线程)并不是在哪里都适用的,使用不当,可能出现很多严重的后果!

看我的程序,这家伙已经占到了2.6G的内存空间了,很可怕吧!

基础才是重中之重~多线程的代价~我的内存都被吃了!

出现这种问题的原因就是我没有把线程这东西搞清楚,在一个调用密集的环境里,使用了多线程,要知道,这种线程,线程池里会有N多个线程的,处理的速度我没有觉得提升,反而内存吃的很严重,这个原因就是因为你的工作线程太多的缘故

所以,多线程,并行,异步这些东西不是在哪都适用的,在调用密集时就能用它,因为它会吃你很多内存,如果非要用,请你把线程池的最大数限制一下,这个值可以控制在10以内。

下面是多线程吃内存的例子

     while (true)      {        // ThreadPool.SetMaxThreads(10, 10);//限制最大工作线程和i/o线程        ThreadPool.QueueUserWorkItem(new WaitCallback((a) =>        {          ConcurrentDictionary<string, SendingResult> test2 = new ConcurrentDictionary<string, SendingResult>();          test2.TryAdd(Guid.NewGuid().ToString(), new SendingResult           {             BatchNumber = Guid.NewGuid().ToString(),             DbName = "zzl",             EndId = 1,             StartId = 1,             TableName = "zzl",             OccurDate = DateTime.Now,           });        }));        if (DateTime.Now.Minute == 02)        {          break;        }      }

查看一个任务管理器

基础才是重中之重~多线程的代价~我的内存都被吃了!

当我把工作线程做了限制后,这种情况得到了改善

基础才是重中之重~多线程的代价~我的内存都被吃了!

如果对于操作频繁(轮训服务)的工作,如果不使用多线程,反而根据不吃什么内存,性能反而更好!

基础才是重中之重~多线程的代价~我的内存都被吃了!

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

全球电商市场TOP5拿下85%市场份额!什么造就了黄金窟?:https://www.ikjzd.com/articles/21568
速卖通有流量没销量,没订单,转化率低怎么办?:https://www.ikjzd.com/articles/21571
店铺销量不好?你可能忽略了这个!:https://www.ikjzd.com/articles/21572
Lazada销量提升秘诀--东南亚在线消费者喜欢买什么?:https://www.ikjzd.com/articles/21574
速卖通直通车的使用方法简析!:https://www.ikjzd.com/articles/21575
怎样提高在速卖通上面的排名?:https://www.ikjzd.com/articles/21577
​TikTok发生了什么?美区增长首次停滞,准入管理力度加大:https://www.kjdsnews.com/a/1836407.html
2024年如何找到在TikTok上发帖的最佳时间:https://www.kjdsnews.com/a/1836408.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流