首页 > 学院 > 开发设计 > 正文

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

2019-11-17 02:34:30
字体:
来源:转载
供稿:网友

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

起因:

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

image

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

研究StringBuilderCache类

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

image

首先看到的是这是一个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的控制台程序:

image

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

image

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

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表