首页 > 系统服务 > 详细

翻String.Format源码发现的新东西:StringBuilderCache

时间:2015-02-09 00:39:04      阅读:299      评论:0      收藏:0      [点我收藏+]

起因:

记不清楚今天是为毛点想F12看String.Format的实现源码了,反正就看到了下图的鸟东西:

技术分享

瞬间石化有没有,StringBuilder还能这么获取?

研究StringBuilderCache类

下面的事件也简单,果断在StringBuilderCache上面点了F12看源码(Resharpe真是好东西啊。。。)

技术分享

首先看到的是这是一个internal的类,怪不得没见有人这么写过呢!

研究一番之后,终于弄清楚这货是干嘛的了:这个类的作用就是缓存一个StringBuilder对象,给那些并不是要做很多Append操作的地方使用的,我们也看到private const int MAX_BUILDER_SIZE = 360,它内部用来判断是用缓存的StringBuilder函数新new出来一个的界限阀值是360.

这个类的流程是这样:

1、调用Acquire方法获取一个StringBuilder,capacity大于360直接new,否则就用StringBuilderCache.CachedInstance这个ThreadStatic变量,当然之后要清空CachedInstance这个变量以防止线程内连续调用Acquire方法获得同一个StringBuilder引用。

2、GetStringAndRelease返回最后的string对象,然后缓存StringBuilder到CachedInstance变量上去。

测试性能

写了简单的验证StringBuilderCache的控制台程序:

技术分享

最终的结果,可以明显看到大量调用的优势:

技术分享

本文源码地址:https://github.com/a407121393/MyDotNetTestProj/tree/master/MyTestSln/TestStringBuilderCache

用到的Util类在另一个目录里面:https://github.com/a407121393/MyDotNetTestProj/tree/master/MyTestSln/Util

翻String.Format源码发现的新东西:StringBuilderCache

原文:http://www.cnblogs.com/12taotie21/p/StringBuilderCache.html

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