日期:2014-05-17  浏览次数:20739 次

问个线程创建的的问题,创建不到2000个线程就报错了
private void btnStart_Click(object sender, EventArgs e)
        {
            for (int na = 0; na < 2000; na++)
            {
                //WaitCallback wcb = new WaitCallback(ThreadPoolText);
                //ThreadPool.QueueUserWorkItem(wcb, "n" + na.ToString() + "|" + na.ToString());
                Thread th = new Thread(ThreadPoolText);
                th.Start("n" + na.ToString() + "|" + na.ToString());
            }
        }
        Dictionary<string, int> dic = new Dictionary<string, int>();
        private void ThreadPoolText(object state)
        {
            string StrText = state.ToString().Split('|')[0];
            int nValue = Convert.ToInt32(state.ToString().Split('|')[1]);
            bool blThread = true;
            dic.Add(StrText,nValue );
            while (blThread)
            {
                Thread.Sleep(100000);
                dic[StrText] = dic[StrText] + 1;
                if (StrText == "")
                {
                    blThread = false;
                }
            }
        }



想创建2000个线程 看看有什么问题,  dic 是可以查看总的创建之后线程的个数,但是在创建第1300多报错了。
上限可以创建多少个线程啊

------解决方案--------------------
引用:
注释的是之前通过线程池创建的,通过线程池创建的比线程创建速度慢很多啊。
而且我看任务管理器里面耗的内存也比线程创建的多。那线程池优势用在什么地方啊。
如果方便用于释放,可以在线程里面判断跳出循环就释放了撒。


使用线程池,可能你的系统当前能使用的数线为几十,远比1300小得多
线程池比Thread快,起码创建上快






------解决方案--------------------<