一个程序集加载的时候,CLR默认会留用该程序集元数据中描述的所有文本常量字符串。由于可能会出现额外的哈希表查找造成的性能下降的现象,所以现在可以禁用这个特性了。
coding中我们平常比较两个字符串是否相等,那这个过程是怎么样的呢?
- 首先判断字符的数量是否相等。
-
CLR逐个对比字符最终确定是否相等。
这个场景是适合字符串留用的。因为不再需要经过以上的两个步骤,直接哈希表拿到value就可以对比确定了。
关于字符串拼接性能
基于以上所有知识,那是不是StringBuilder拼接字符串性能永远都高于符号‘+'呢?答案是否定的。
static void Main(string[] args) { int count = 10000000; Stopwatch sw = new Stopwatch(); sw.Start(); string str1 = "str1", str2 = "str2", str3 = "str3"; for (int i = 0; i < count; i++) { string s = str1 + str2 + str3; } sw.Stop(); Console.WriteLine($@"+用时: {sw.ElapsedMilliseconds}" ); sw.Reset(); sw.Start(); for (int i = 0; i < count; i++) { StringBuilder sb = new StringBuilder();//听说程序员都这样命名StringBuilder sb.Append(str1).Append(str2).Append(str3); } sw.Stop(); Console.WriteLine($@"StringBuilder.Append 用时: {sw.ElapsedMilliseconds}"); Console.Read(); }运行结果:
+用时: 553










