C#关于String暂存池(常量池)
2021-01-08 10:27
标签:关于 oar intern 部分 str cal array har detail string作为最常用的类型,在实际项目中会有大量的字符串操作,这样会带来大量的字符串创建,内存分配、回收,进而影响性能。因此CLR对于string进行了特殊的优化,CLR中存在“字符串暂存池”概念。那么CLR 如何做到的呢?在CLR初始化时创建一个内部的哈希表,这个表相当于一个字典表,键就是字符串,值是指向托管堆中该字符串对象的引用。(具体详看原文链接:https://blog.csdn.net/xiaouncle/article/details/87832198) 以下内容由原文得到: 红色部分代表进行比较的变量 不是所有的字符串都放在暂存池中,以下三种情况会查询暂存池(若查询不到就将其存入暂存池)(引用地址相同): 利用字面量值创建string对象: //String str1 = “999”;String str2 = “999”; 利用string.Intern()创建string对象: //StringBuilder sb1 = new StringBuilder(“99999”);string str1 = “99999”;string str2=string.Intern(sb1.ToString); 字面量值+字面量值拼接创建string对象: //sb1 = “99”;sb2=”999”;str1=”999”;str2=”99”;sb1+str1;sb2+str2; 所以不会查询暂存池的情况有(引用地址不同): str.Tostring(); //str1=”999”;str2=str1.ToString(); char[].ToString(); //str1=”999”;char[] charArray=str1.ToArray();str2=charArray.ToString(); new String(); //(1)str1=”999”;char[] charArray = str1.ToArray();string str2 = new string(charArray);string str3 = new string(charArray); 字面量值+非字面量值 //char[] charArray = {‘9’,’9’};str1 = “99999”;str2 =”999”+charArray.Tostring(); 非字面量值+非字面量值 //char[] charArray1 = {‘9’,’9’};char charArray2 = {‘9’,’9’,’9’}; str1 =”99999”;str2=charArray1.ToString()+charArray2.ToString(); C#关于String暂存池(常量池) 标签:关于 oar intern 部分 str cal array har detail 原文地址:https://www.cnblogs.com/qjns/p/13125170.html
上一篇:CSS3动画效果--2D
下一篇:c#中Equals()和==区别