首页 > 编程语言 > 详细

(转载)线程静态在对象缓存中的妙用

时间:2014-04-10 12:52:37      阅读:443      评论:0      收藏:0      [点我收藏+]

 线程静态标记静态字段的值对于每个线程都是唯一的。简单来说,是只应用在静态字段上,而且对于每一个线程都是独立存储的。

    那么,结合对象缓存来说,需求如下:

    1、一些工具类,需要占用一定资源,但又不希望太频繁的创建该工具类。

    2、需要适应多线程的情况

一个例子就是StringBuilder类,StringBuilder类内部实现使用了char[]来存储字符,我们需要使用StringBuilder来创建字符串,而且希望不太频繁的创建它,避免内存压力。

下面,就是.NET Framework 4.5.1 中对StringBuilderCache的实现:

bubuko.com,布布扣
bubuko.com,布布扣
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;
    }
}
bubuko.com,布布扣
bubuko.com,布布扣

(转载)线程静态在对象缓存中的妙用,布布扣,bubuko.com

(转载)线程静态在对象缓存中的妙用

原文:http://www.cnblogs.com/gracian/p/3654083.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!