中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

基礎才是重中之重~多線(xian)程(cheng)的(de)代價(jia)~我的(de)內存(cun)都被吃(chi)了!

回到目錄

返回異步與并行目錄

異步(bu)操作是.net4.5推出的新名詞,事實上,這東西早就有(you)了,它歸根結底是通過線(xian)(xian)程池來實現(xian)的,即將一個大任務分成(cheng)(cheng)多(duo)個小(xiao)任何塊,每個線(xian)(xian)程并(bing)行(xing)處(chu)理其中的一個,完成(cheng)(cheng)后(hou)再把結果(guo)告訴主線(xian)(xian)程,在.net4.5推出后(hou),這種(zhong)技術得(de)到了封裝,讓(rang)開(kai)發人員實現(xian)起來更加方便了,但是,并(bing)發(導步(bu),多(duo)線(xian)(xian)程)并(bing)不(bu)是在哪里都(dou)適用(yong)的,使(shi)用(yong)不(bu)當,可能出現(xian)很多(duo)嚴重的后(hou)果(guo)!

看我的程序,這家伙已經占到了2.6G的內存(cun)空間了,很可怕吧!

出現這種問題的原因就是我沒有把線程這東西搞清楚,在一個調用密集的環境里,使用了多線程,要知道,這種線程,線程池里會有N多個線程的,處理的速度我沒有覺得提升,反而內存吃的很嚴重,這個原(yuan)因就是因為你的工作(zuo)線程太多(duo)的緣故(gu)

所以(yi),多線程,并行,異步(bu)這些(xie)東西不是在哪都適(shi)用(yong)的,在調用(yong)密集時就能用(yong)它(ta),因為它(ta)會吃你(ni)(ni)很多內存,如果非要用(yong),請(qing)你(ni)(ni)把線程池的最大數限制(zhi)(zhi)一下,這個值可以(yi)控制(zhi)(zhi)在10以(yi)內。

下面是多線程吃(chi)內存的例子

          while (true)
            {
               // ThreadPool.SetMaxThreads(10, 10);//限(xian)制最大工作線程(cheng)和i/o線程(cheng)
                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;
                }
            }

查看一個任務管理器

當我(wo)把(ba)工作(zuo)線程做了(le)限制后,這種(zhong)情況得到了(le)改善

如果(guo)對于操(cao)作頻繁(輪訓服務(wu))的(de)工作,如果(guo)不(bu)使用多線程,反而(er)根(gen)據不(bu)吃什么內存,性能反而(er)更好(hao)!

 

感謝您的閱讀!

回到目錄

返回異步與并行目錄

posted @ 2015-03-11 15:32  張占嶺  閱讀(4992)  評論(7)    收藏  舉報