线程静态在对象缓存中的妙用

2014-11-23 23:31:10 · 作者: · 浏览: 0
线程静态标记静态字段的值对于每个线程都是唯一的。简单来说,是只应用在静态字段上,而且对于每一个线程都是独立存储的。
那么,结合对象缓存来说,需求如下:
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;
}
}