你的位置:首页 > ASP.net教程

[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;        }      }

查看一个任务管理器

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

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

到泰国旅游团购去泰国旅游攻略泰国六日游行程安排参考去泰国旅游跟团行程泰国旅游护照签证【繁华都市开心地】—欢乐谷 春运须防盗防骗六处地方要小心 成都特色茶馆 【美食资讯】—在北京感受台湾美食 湖北武汉特产:绢花 “天下第一仙山”武当山旅游攻略 中国湖北武当山特色菜:郧县网油砂 湖北武汉特产:武汉铜锣 香港圣诞节打折开始日期是哪天?会持续多久? 香港哪里有海鲜吃?吃海鲜去哪里好? 去澳门旅游如何设计线路好?澳门旅游最佳线路 香港吃大排档去哪里比较好? 广东连州湟川三峡在哪里?湟川三峡具体位置? 湟川三峡游船价格?连州湟川三峡船票多少钱一张? 韶关市动物园地址?韶关动物园门票多少钱? 韶关有动物园吗?韶关华南虎动物园地址? BAT 54 E6327 Datasheet BAT 54 E6327 Datasheet BAS 40 B5003 Datasheet BAS 40 B5003 Datasheet BAS 70 B5003 Datasheet BAS 70 B5003 Datasheet 冬天旅游穿什么鞋 冬天旅游穿什么鞋 冬天旅游穿什么鞋 冬天旅游必备物品清单 冬天旅游必备物品清单 冬天旅游必备物品清单 九顶山冬天旅游 九顶山冬天旅游 九顶山冬天旅游