日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

浅谈Pool对象

發布時間:2024/4/24 综合教程 34 生活家
生活随笔 收集整理的這篇文章主要介紹了 浅谈Pool对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Pool對象的技術指標:

避免頻繁創建經常使用的稀有資源,提高工作效率.

控制閥值,很多情況下一些關鍵資源都有一個最佳并發數,超過這個拐點性能有可能急劇下降,也有可能繼續增大并發數性能不能提升.

安全的獲取對象和釋放對象(使用之后放回連接池)

public sealed class Pool<T> : IDisposable where T : IDisposable
    {
        private bool disposed = false;
        private Semaphore gate;
        private Stack<T> pool;
        public event Predicate<T> Predicate;
        public Pool(int concrrent,Func<Pool<T>,T> activator)
        {
            if (concrrent <= 0)
            {
                throw new ArgumentException("concrrent");
            }
            if (activator==null)
            {
                throw new ArgumentNullException("activator");
            }
            gate = new Semaphore(concrrent, concrrent);
            pool = new Stack<T>();
            for (int i=0;i< concrrent; i++)
            {
                pool.Push(activator(this)); 
            }
            
        }

        public T Acquire()
        {
            if (!gate.WaitOne())
                throw new InvalidOperationException();
            lock (pool)
            {
                return pool.Pop();
            }
        }

        public void Release(T target)
        {
            lock (pool)
            {
                if (Predicate!=null)
                {
                    if (Predicate(target))
                    {
                        pool.Push(target);
                        gate.Release();
                    }
                }
                else
                {
                    if (target != null)
                    {
                        pool.Push(target);
                        gate.Release();
                    }      
                }
            }
        }

        private void Dispose(bool disposing)
        {
            if (disposed)
                return;
            if (disposing)
            {
                gate.Dispose();
            }
            for (int i = 0; i < pool.Count; i++)
            {
                var t = pool.Pop();
                t.Dispose();
            }
            disposed = true;
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        ~Pool()
        {
            Dispose(false);
        }
    }

T對象實現時最好與Pool對象建立某種關聯,調用T對象實例的某個方法時可以將對象送回Pool,而不是銷毀它.同時Pool對象Release對象時,最好通過事件(關聯關系)判斷是否是從Pool對象獲取的,然后放回Pool.

總結

以上是生活随笔為你收集整理的浅谈Pool对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产国语亲子伦亲子 | 国产经典一区二区 | 欧美午夜一区 | 精品久久久无码中文字幕边打电话 | 波多野结衣办公室33分钟 | 成年人免费看的视频 | 精品三区 | 91淫黄大片| 亚洲小视频 | 亚洲天堂不卡 | 97人人射 | 亚洲成人网在线观看 | 久久国产情侣 | 久久久久久久久久久影视 | 欧美成人免费在线观看 | jizz内谢中国亚洲jizz | 久久国产乱子 | 亚洲欧美网 | 99免费看 | 九月色婷婷 | 一区二区高潮 | 91麻豆国产福利精品 | 夜夜爽影院 | 亚洲一区二区观看播放 | 稀缺小u女呦精品呦 | 欧美日韩aaa | 日韩不卡视频一区二区 | 成人免费一级视频 | 色呦呦视频在线 | 久久无码性爱视频 | 日韩在线不卡av | 欧美a级网站 | 日韩精品一区二区三区色欲av | 好色av | 国产白袜脚足j棉袜在线观看 | 国产精品美女av | 中国人与拘一级毛片 | 欧美刺激性大交 | 93久久精品日日躁夜夜躁欧美 | 国产亚洲精品久久久久久青梅 | 午夜福利理论片在线观看 | 99精品视频播放 | 草草影院国产第一页 | 亚洲午夜视频在线 | 日韩在线观看视频一区二区 | 日韩精品久久久久久久酒店 | 顶级嫩模啪啪呻吟不断好爽 | 亚洲一区二区影院 | 亚洲视频一区二区三区在线观看 | 国产精品99一区二区三区 | 亚洲精品久久久久中文字幕二区 | 原神女裸体看个够无遮挡 | 亚洲毛片大全 | 欧美视频自拍偷拍 | 国产成人亚洲一区二区 | 涩涩视频免费看 | 成人网在线视频 | 亚洲一级av毛片 | 久久精品免费一区二区 | www.亚洲欧美 | 91播放在线| 亚洲社区在线观看 | se综合| 德国经典free性复古xxxx | 91美女视频在线观看 | 先锋av在线资源 | 亚洲一区二区中文 | 91麻豆一区二区三区 | 日本久久网| 中文字幕在线观看不卡 | 九色91| 日韩人妻精品无码一区二区三区 | a级片黄色 | 午夜桃色 | 捆绑无遮挡打光屁股调教女仆 | a视频网站| 久综合网 | 午夜久久久久久久久久 | 人人91 | 杨幂毛片 | 亚洲在线观看av | 欧美精品videos另类日本 | 国产va在线 | 亚洲精品在线视频 | 久久久欧美精品sm网站 | 蜜桃视频一区二区 | 懂色av | 精品在线观看视频 | 伊人影院av| 国产a v一区二区三区 | 爱爱视频在线看 | 蜜桃视频一区二区 | 91亚洲国产成人精品一区二三 | 网红av在线 | 日韩欧美视频免费观看 | 精品成人久久久 | 非洲黄色一级片 | 激情九月婷婷 | 亚洲综合一区二区三区 |