国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

線程靜態在對象緩存中的妙用

2019-11-17 03:14:47
字體:
來源:轉載
供稿:網友

線程靜態在對象緩存中的妙用

線程靜態標記靜態字段的值對于每個線程都是唯一的。簡單來說,是只應用在靜態字段上,而且對于每一個線程都是獨立存儲的。

那么,結合對象緩存來說,需求如下:

1、一些工具類,需要占用一定資源,但又不希望太頻繁的創建該工具類。

2、需要適應多線程的情況

一個例子就是StringBuilder類,StringBuilder類內部實現使用了char[]來存儲字符,我們需要使用StringBuilder來創建字符串,而且希望不太頻繁的創建它,避免內存壓力。

下面,就是.NET Framework 4.5.1 中對StringBuilderCache的實現:

internal static class StringBuilderCache{    PRivate const int MAX_BUILDER_SIZE = 360;    [ThreadStatic]    private static StringBuilder CachedInstance;    public static StringBuilder Acquire(int capacity = StringBuilder.DefaultCapacity){        if(capacity <= MAX_BUILDER_SIZE){            StringBuilder sb = StringBuilderCache.CachedInstance;            if (sb != null){                if(capacity <= sb.Capacity){                    StringBuilderCache.CachedInstance = null;                    sb.Clear();                    return sb;                }            }        }        return new StringBuilder(capacity);    }    public static void Release(StringBuilder sb){        if (sb.Capacity <= MAX_BUILDER_SIZE){            StringBuilderCache.CachedInstance = sb;        }    }    public static string GetStringAndRelease(StringBuilder sb){        string result = sb.ToString();        Release(sb);        return result;    }}

帶完整注釋的版本可以參考:http://www.projky.com/dotnet/4.5.1/System/Text/StringBuilderCache.cs.html

采用StringBuidlerCache類的例子是String.Join方法,可以參考:http://www.projky.com/dotnet/4.5.1/System/String.cs.html

不得不贊一下,這樣的設計非常巧妙。.NET 中程序的執行都在線程中,每個線程都有自己單獨的緩存,再也不用擔心同步、加鎖的問題,而且對于緩存的對象設置了大小限制。

再總結下它的原理:通過線程靜態賦予了靜態字段在多線程中獨立存儲的能力,再通過操作該靜態字段來存儲緩存對象。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泽州县| 安福县| 织金县| 揭阳市| 临颍县| 德清县| 云和县| 扶绥县| 襄汾县| 淮北市| 衡山县| 自治县| 定兴县| 寿阳县| 行唐县| 河津市| 蕉岭县| 阜新市| 和静县| 焦作市| 龙泉市| 毕节市| 晋宁县| 红桥区| 东乡县| 长宁区| 横峰县| 长子县| 鄂伦春自治旗| 墨玉县| 恭城| 工布江达县| 西昌市| 岳池县| 信丰县| 兴文县| 陆良县| 武定县| 巴马| 普定县| 通城县|