黑马程序员技术交流社区

标题: 关于对象池技术,那在什么情况下使用对象池 有什么优点? [打印本页]

作者: 转达小朋友    时间: 2013-6-8 23:35
标题: 关于对象池技术,那在什么情况下使用对象池 有什么优点?
本帖最后由 转达小朋友 于 2013-6-9 20:48 编辑

学习iis底程时了解到了 对象池技术  不是很明白 求大师点化。。
作者: 274997322    时间: 2013-6-8 23:43
对象池的工作原理的核心有两点:使用和缓存,即对于那些被频繁使用的对象,在使用完后,不立即将它们释放,而是将它们缓存起来,以供后续的应用程序重复使用。对象池的优点就是减少创建对象和释放对象的次数,进而改善应用程序的性能。
你觉得那些对象需要频繁的创建和释放,就可以使用对象池。

作者: 转达小朋友    时间: 2013-6-9 13:42
听起来 是个不错的东西。你又在实例中用过吗。求实例
作者: 无__畏    时间: 2013-6-9 14:03
对象池避免多个线程访问到同一个对象,避免一个进程内出现了多个对象。  

例如:     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 = "开始随机点名";
            }
作者: popoluno    时间: 2013-6-9 15:40
来学习的
作者: 转达小朋友    时间: 2013-6-9 20:47
无__畏 发表于 2013-6-9 14:03
对象池避免多个线程访问到同一个对象,避免一个进程内出现了多个对象。  

例如:     private void btnRan ...

提高效率 节省资源,谢谢无谓的回答




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2