国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

淺談 MemoryCache 的原生插值方式

開發 后端
這在Github上也有issue討論,從2017年開始就有大佬質疑這是一個反人類的設計思路,官方為了不引入Break Change,一直保持到現在。

[[443154]]

.NET運行時內置了常用的緩存模塊:MemoryCache

標準的MemoryCache暴露了如下幾個屬性和方法:

  1. public int Count { get; } 
  2. public void Compact(double percentage); 
  3. public ICacheEntry CreateEntry(object key); 
  4. public void Dispose(); 
  5. public void Remove(object key); 
  6. public bool TryGetValue(object keyout object result); 
  7. protected virtual void Dispose(bool disposing); 

但是你使用常規模式去插值/獲取值,可能會出現意想不到的情況。

就如下這樣的常規代碼:

  1. var s = new MemoryCache(new MemoryCacheOptions { }); 
  2. var entry = s.CreateEntry("WeChatID"); 
  3. entry.Value = "精益碼農"
  4.  
  5. var f =  s.TryGetValue("WeChatID",out  object obj); 
  6.  
  7. Console.WriteLine(f); 
  8. Console.WriteLine(obj); 

會輸出如下結果:

是不是很意外。

但是看官們一般不會使用MemoryCache的原生方法,而是使用位于同一命名空間的 擴展方法Set。

  1. var s = new MemoryCache(new MemoryCacheOptions { }); 
  2. s.Set("WeChatID""精益碼農"); 
  3. var f = s.TryGetValue("WeChatID"out object obj); 
  4.  
  5. Console.WriteLine(f); 
  6. Console.WriteLine(obj); 

如此便能正確輸出。

擴展類源碼看一看

  1. public static TItem Set<TItem>(this IMemoryCache cache, object key, TItem value) 
  2.      using ICacheEntry entry = cache.CreateEntry(key); 
  3.      entry.Value = value; 
  4.      return value; 

擴展方法與原生方法的差異在于using關鍵字 (也說明了CacheEntry繼承自IDisposable接口)。

繼續追溯CacheEntry實現的Dispose方法:

  1. public void Dispose() 
  2.  { 
  3.      if (!_state.IsDisposed) 
  4.      { 
  5.          _state.IsDisposed = true
  6.  
  7.          if (_cache.TrackLinkedCacheEntries) 
  8.          { 
  9.              CacheEntryHelper.ExitScope(this, _previous); 
  10.          } 
  11.  
  12.          // Don't commit or propagate options if the CacheEntry Value was never set
  13.          // We assume an exception occurred causing the caller to not set the Value successfully, 
  14.          // so don't use this entry. 
  15.          if (_state.IsValueSet) 
  16.          { 
  17.              _cache.SetEntry(this); 
  18.  
  19.              if (_previous != null && CanPropagateOptions()) 
  20.              { 
  21.                  PropagateOptions(_previous); 
  22.              } 
  23.          } 
  24.  
  25.          _previous = null; // we don't want to root unnecessary objects 
  26.      } 
  27.  } 

注意其中的_cache.SetEntry(this),表示在MemoryCache底層的ConcurrentDictionary

綜上:緩存項CacheEntry需要被Dispose,才能被插入MemoeyCache。

這是怎樣的設計模式?IDisposable接口不是用來釋放資源嗎?

為啥要使用Dispose方法來向MemoryCache插值?

不能使用一個明確的Commit方法嗎?

這在Github上也有issue討論,從2017年開始就有大佬質疑這是一個反人類的設計思路,官方為了不引入Break Change,一直保持到現在。

基于此現狀,我們如果使用MemoryCache的原生插值方法, 需要這樣:

  1. var s = new MemoryCache(new MemoryCacheOptions { }); 
  2. using (var entry = s.CreateEntry("WeChatID")) 
  3.      entry.Value = "精益碼農"
  4. var f = s.TryGetValue("WeChatID"out object obj); 
  5. ... 

盡量不要使用C#8.0推出的不帶大括號的using語法

  1. using var entry = s.CreateEntry("WeChatID"); 
  2. entry.Value = "精益碼農"
  3.             
  4. var f = s.TryGetValue("WeChatID"out object obj); 
  5. ... 

這種沒明確指定using作用范圍的語法,會在函數末尾才執行Dispose方法, 導致執行到TryGetValue時,緩存項其實還沒插入!!!

Last

 

  • MemoryCache插值的實現過程很奇葩
  • 盡量使用帶明確大括號范圍的using語法,C#8.0推出的不帶大括號的using語法糖的作用時刻在函數末尾,會帶來誤導。

 

責任編輯:武曉燕 來源: 精益碼農
相關推薦

2023-09-20 16:11:32

云原生分布式系統

2023-10-26 08:47:30

云原生數據采集

2022-09-20 08:00:32

VMWARE云原生

2011-06-20 10:36:29

SEO

2012-11-15 13:52:07

系統密碼加密加密系統安全

2009-09-28 13:39:01

Hibernate工作

2009-07-14 12:47:07

WebWork工作方式

2021-07-14 09:18:19

Python插值算法

2012-11-30 14:35:17

2009-09-29 16:16:58

Hibernate H

2021-07-19 10:43:43

云原生軟件開發架構

2022-05-25 16:32:36

云原生Cloud

2020-12-14 15:28:05

云計算架構云原生

2014-12-23 09:57:29

配線架

2011-02-28 11:19:12

雙絞線布線

2023-11-13 09:28:20

跨組件組件化

2011-05-10 17:11:46

PR值

2009-07-03 13:24:56

JSP表單

2023-08-07 15:49:59

CSS顏色插值算法

2009-09-07 03:23:40

C# Main方法
點贊
收藏

51CTO技術棧公眾號

欧美精品乱码久久久久久| 国产精品第一| 盗摄系列偷拍视频精品tp| 黄色一级视频在线播放| 精品176极品一区| 欧美曰成人黄网| 国产有码一区二区| 秋霞国产精品| 国产精品一区二区在线播放 | 久久综合福利| 蜜桃成人av| 欧美成人免费视频| 国产精品蜜芽在线观看| 欧美系列在线观看| 免费黄视频网站| 26uuu国产一区二区三区| 一区二区不卡在线视频 午夜欧美不卡' | 免费在线黄网| 91污在线观看| 免费看欧美一级片| 亚洲一级少妇| 欧美亚洲免费在线一区| 影音先锋可以看的网站| 国产女同性恋一区二区| 欧美亚洲午夜视频在线观看| 色在线视频观看| 欧美videos中文字幕| 伊人久久大香线蕉综合75| 亚洲欧美在线专区| 欧美成人video| 久久久久久女乱国产| 日本中文字幕在线看| 久久久精品麻豆| 精品无人区一区二区| 色偷偷亚洲男人天堂| 国产一级片黄色| 国产成人在线看| 欧美激情亚洲一区| av在线一区不卡| 一区二区三区无码高清视频| 国产福利一区视频| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 最新日韩av在线| 日韩视频在线视频| 国产91精品露脸国语对白| 九色成人免费视频| 国产极品一区| 久久精品国产91精品亚洲| 日本免费成人| 欧美日韩国内自拍| 亚洲免费av一区二区| 色综合久久九月婷婷色综合| 国产天堂在线| 精品国产自在久精品国产| 三级中文字幕在线观看| 日韩亚洲欧美中文在线| 亚洲美女色播| 97国产精品视频人人做人人爱| 黄色片免费在线| 色狠狠av一区二区三区| 男人在线资源站| 久久综合色婷婷| 91久久精品美女| 在线观看国产精品入口| 国产亚洲精品久久飘花| 日本女优在线视频一区二区| 国产黄色片免费在线观看| 国产日产精品1区| 欧美激情图区| 91精品国产91久久久久久最新毛片 | 亚洲天堂手机| 亚洲午夜未删减在线观看| 国产一级做a爰片久久| 国产精品网曝门| 国产对白在线正在播放| 欧美乱熟臀69xxxxxx| 欧美1级2级| 日韩av免费在线播放| 亚洲性视频h| 久久国产午夜精品理论片最新版本| 久久久久久免费毛片精品| 中文在线天堂网| 日韩成人中文字幕| 久久精品色综合| 精品卡一卡二| 91老司机福利 在线| 黄色影院在线播放| 国产一区二区精品丝袜| 日韩毛片视频| a级网站在线观看| 亚洲国产日韩一区二区| 妞干网在线播放| 亚洲女同ⅹxx女同tv| 免费高清一区二区三区| 亚洲欧美在线视频| 亚洲免费视频一区二区三区| 色噜噜久久综合伊人一本| 成人免费av| 久久久久久久网站| 一区在线视频观看| 成人一区二区免费视频| 色综合天天性综合| 国产精品xnxxcom| 亚洲日本成人网| a黄色在线观看| 一区二区高清视频在线观看| 在线播放免费av| 97在线视频免费播放| 日韩av不卡一区二区| 8848hh四虎| 中文字幕亚洲天堂| 9久re热视频在线精品| 成人91视频| 久久日韩精品一区二区五区| 91激情在线| 茄子视频成人在线| 波多野结衣91| 欧美成人久久久| 国产精品v亚洲精品v日韩精品| 男人添女人下面高潮视频| 久久99国产精品久久99 | 精品国产一区二区亚洲人成毛片 | 日韩综合网站| 中文字幕一区二区三区在线乱码| 亚洲一区在线观看免费观看电影高清| 性欧美ⅴideo另类hd| 国产精品一区二区三区久久久 | 欧美日韩国产a| 97视频在线观看网站| 欧美肥老妇视频| 91禁外国网站| 国产精品一区免费视频| 国产二区视频在线观看| 清纯唯美亚洲激情| 久久精品日韩一区二区三区| 成人爽a毛片免费啪啪| 精品欧美乱码久久久久久1区2区| 欧美男gay| 成人亚洲视频在线观看| 亚洲一区二区精品| 美女视频一区二区三区| 免费不卡视频| 国产欧美丝袜| 在线看国产日韩| 99精品在线| 超碰在线公开免费| 91黄色免费看| 欧美日韩中文一区二区| 婷婷免费在线观看| 久久理论片午夜琪琪电影网| 久久欧美一区二区| 精品午夜av| 国产日韩欧美日韩| 国产精品成人一区二区艾草| 精品国产免费人成网站| 亚洲午夜激情| 亚洲精品美女网站| 久久国产欧美日韩精品| 阿v视频在线| 日本女人高潮视频| 国产午夜精品视频| 97精品久久久久中文字幕| 午夜影院免费看| 日本一区二区在线播放| 一区二区三区高清| 欧美精品一区二区久久| 中文在线中文字幕| 国产成人成网站在线播放青青| 日本在线不卡视频| 丝袜国产在线| 中国老女人av| 色偷偷av一区二区三区| av中文字幕不卡| 精品国产一区二区三区不卡蜜臂| 97影院理论| 国产福利一区二区三区在线观看| 制服丝袜一区二区三区| 精品一区二区三区在线视频| 日韩中文在线播放| 色婷婷狠狠18| 国产在线观看一区二区三区| 日韩欧中文字幕| 男人的j进女人的j一区| 日韩伦理在线一区| www.国产区| 国产91色在线|免| 欧美日韩视频在线观看一区二区三区| 亚洲影院在线| 国产精品毛片无码| 在线观看免费毛片| 日韩欧美一区二区三区| 先锋av资源在线| 久久久久无码国产精品一区| 日韩精品一区国产麻豆| 日韩美女毛片| 青春草在线观看| 久久久久一本一区二区青青蜜月| 亚洲自拍偷拍欧美| 国产一区二区精品| 久久久久久久性潮|