国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - .Net Core中ObjectPool的使用與源碼解析

.Net Core中ObjectPool的使用與源碼解析

2020-06-19 13:49MicroHeart! ASP.NET教程

這篇文章主要給大家介紹了關于.Net Core中ObjectPool的使用與源碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用.Net Core具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

一、對象池  

運用對象池化技術可以顯著地提升性能,尤其是當對象的初始化過程代價較大或者頻率較高。下面是ObjectPool源碼中涉及的幾個類。當你看過.Net Core源碼很多時,你會發現,微軟的開發很多都是這種模式,通過Policy構建Provider,通過Provider創建最終的類。

.Net Core中ObjectPool的使用與源碼解析

二、使用

這個組件的目的主要是將對象保存到對象池,用的時候直接去取,不需要重新創建,實現對象的重復利用。但是有個問題,假如對象池中開始沒有對象或者取得數量大于對象池中的數量怎么辦?在對象池中對象的數量不足時,此時來取對象,需要通過Policy創建對象,至于怎么創建對象,是你需要實現的。Policy如上圖,有個默認實現  DefaultPooledObjectPolicy ,它的創建就是 new T().

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
DefaultObjectPool<User> defaultPool = new DefaultObjectPool<User>(new DefaultPooledObjectPolicy<User>(), 2);
 
   var firstUser=defaultPool.Get();//從對象池中取一個對象,此時對象池中還沒有對象,返回 Age=0 Name=null
 
   var user1 = new User()
   {
    Age = 18,
    Name = "MicroHeart"
   };
 
   var user2 = new User()
   {
    Age = 19,
    Name = "MicroHeart"
   };
 
   var user3 = new User()
   {
    Age = 20,
    Name = "MicroHeart"
   };
 
   defaultPool.Return(user1);//將對象放回對象池中,但是不一定成功。對象池有數量限制,而且也可以自定義限制,讓一些對象不能放入對象池中
   defaultPool.Return(user2);
   defaultPool.Return(user3);
 
   var u1 = defaultPool.Get();//從對象池中取一個對象,返回第一個放入的user1
   var u2 = defaultPool.Get();//從對象池中取一個對象,返回第二個放入的user2
   var u3 = defaultPool.Get();//此時對象池中沒有對象了,獲取對象調用的Policy的Create方法,而DefaultPooledObjectPolicy的Create方法的實現是:new T(),所以返回 Age=0 Name=null

上面例子當對象池中沒有對象是,調取獲取方法,其實就是new T()。下面在對象中添加3個對象,但是對象池中只有2個空間,所以第三個是添加不進去的。

現在自己創建一個的Policy

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MyUserPolicy : PooledObjectPolicy<User>//需要繼承抽象類
 {
  public override User Create()
  {
   return new User()
   {
    Age = 18,
    Name = "MicroHeart"
   };
  }
 
  public override bool Return(User user)
  {
   if (user.Age == 18)
    return false;
   return true;
  }
 }
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
DefaultObjectPool<User> defaultPool = new DefaultObjectPool<User>(new MyUserPolicy(), 2);
 
   var firstUser=defaultPool.Get();//返回 Age=0 Name=null
 
   var user1 = new User()
   {
    Age = 18,
    Name = "MicroHeart"
   };
 
   var user2 = new User()
   {
    Age = 19,
    Name = "MicroHeart"
   };
 
   var user3 = new User()
   {
    Age = 20,
    Name = "MicroHeart"
   };
 
   defaultPool.Return(user1);
   defaultPool.Return(user2);
   defaultPool.Return(user3);
 
   var u1 = defaultPool.Get();//返回user2 因為user1的Age=18,policy中Reture篩選條件 返回false,導致第一個user不能放入連接池中。
   var u2 = defaultPool.Get();//返回user3
   var u3 = defaultPool.Get();//返回 Age=18 Name=MicroHeart 這個是使用 Policy中的Create創建

三、源碼解析

 IPooledObjectPolicy<T>:  主要作用是創建對象和將對象放入連接池中

  Create:定義一個創建對象的方法,當連接池中的數量不夠取的時候,通過此方法創建對象。

  Return:將對象放入連接池中,如果放入成功,返回Ture.否則返回False.
  DefaultPooledObjectPolicy<T>:繼承抽象類PooledObjectPolicy<T>,而抽抽象類繼承接口 IPooledObjectPolicy<T>。Policy的默認實現類

    Create:定義一個默認創建對象的方法 new T();

    Return:不論是否放入連接池,全部返回True.

ObjectPoolProvider:創建對象池(ObjectPool)

  abstract ObjectPool<T> Create<T>(IPooledObjectPolicy<T> policy):通過Policy創建ObjectPool

  DefaultObjectPoolProvider:ObjectPoolProvider的默認實現類

    ObjectPool<T> Create<T>(IPooledObjectPolicy<T> policy) :創建一個可以容納處理器數量X2的對象池。

ObjectPool<T>:對象池

  T Get():從對象池中獲取對象。

  void Return(T obj):將對象放入對象池中。

  DefaultObjectPool:對象池的默認實現類,它實現了Get和Return方法。其實對象池的本質就是它的中的 ObjectWrapper[] _items; ,當使用Return方法是,將對象放入 ObjectWrapper數組中。Get方法從數組中取。

.Net Core中ObjectPool的使用與源碼解析

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。

原文鏈接:https://www.cnblogs.com/MicroHeart/p/11701647.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成av在线 | 日本精品一区二区三区在线观看 | 日韩成人在线视频 | 影音先锋国产精品 | 鲁一鲁av | 狠狠干网站 | 蜜桃国精产品二三三区视频 | 久久男人精品 | 国内精品视频一区 | 久久久久国产精品免费免费搜索 | 国内久久久久久 | 黄色网址在线免费 | 亚洲国产精品久久久久秋霞蜜臀 | 亚洲国产成人av | 久久久国产精品免费观看 | 成人国产精品免费观看 | 亚洲第一成年人网站 | 日日操夜夜操天天操 | 在线观看一区二区视频 | 亚洲高清一区二区三区 | 欧美大片免费在线观看 | 国产精品一区二 | 日韩在线视频播放 | 91久久| 福利片在线观看 | 午夜剧 | 亚洲视频在线视频 | 日韩欧美在线视频 | 天堂国产 | 午夜电影网 | 欧美天堂在线观看 | 女人高潮特级毛片 | 国产在线一区二区三区 | 精品国产鲁一鲁一区二区在线观看 | 日韩精品视频一区二区三区 | 精品国产子伦久久久久久小说 | 亚洲欧美综合乱码精品成人网 | 欧美日韩第一页 | 久久国产欧美日韩精品 | 日韩一区二区三区在线 | 国产精品成人一区二区三区 |