A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 转达小朋友 于 2013-6-9 20:48 编辑

学习iis底程时了解到了 对象池技术  不是很明白 求大师点化。。

5 个回复

倒序浏览
对象池的工作原理的核心有两点:使用和缓存,即对于那些被频繁使用的对象,在使用完后,不立即将它们释放,而是将它们缓存起来,以供后续的应用程序重复使用。对象池的优点就是减少创建对象和释放对象的次数,进而改善应用程序的性能。
你觉得那些对象需要频繁的创建和释放,就可以使用对象池。
回复 使用道具 举报
听起来 是个不错的东西。你又在实例中用过吗。求实例
回复 使用道具 举报
对象池避免多个线程访问到同一个对象,避免一个进程内出现了多个对象。  

例如:     private void btnRandomStart_Click(object sender, RoutedEventArgs e)
        {
            Thread thread = ThreadSessionFactory.GetCurrentThreadSession(StartRandom);   //从对象池获取对象,确定对象在线程内唯一
            ---------------------------------------------
              这里如果改为Thread thread = new Thread(StartRandom);
              你分析一下,我点一下这个按钮,让他开始执行,他就创建了一个对象,然后thread.Start()。
              再点一下,我就让他停止执行,  那么他又创建了一个对象,这个新对象没有初始化也没有状态,那么它就又执行了thread.Start()
              是不是这个线程就又创建了一个线程...  它每次都是创建一个新的对象,所以不能把当前线程的thread给停止掉

               如果使用了对象池,那么我再次点击的时候,它拿到的是上次点击时候创建的对象,然后继续对那个对象进行操作
            -----------------------------------------------
            if (isStart == false)
            {
                isStart = true;
                if (thread.ThreadState == ThreadState.Suspended)      //判断thread的状态
                {
                    thread.Resume();       //继续已挂起的线程
                }
                else
                {
                    lock (thread)   
                    {
                        thread.Start();      //启动这个线程
                    }
                }
                //thread.Start();
                this.btnRandomStart.Content = "停止";
            }
            else
            {
                isStart = false;
                //thread.Abort();
                lock (thread)
                {
                    thread.Suspend();    //挂起线程
                }
                this.btnRandomStart.Content = "开始随机点名";
            }
回复 使用道具 举报
来学习的
回复 使用道具 举报
无__畏 发表于 2013-6-9 14:03
对象池避免多个线程访问到同一个对象,避免一个进程内出现了多个对象。  

例如:     private void btnRan ...

提高效率 节省资源,谢谢无谓的回答
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马