gdo*_*ica 29 .net c# compiler-construction string clr
为什么默认情况下只有文字字符串保存在实习池中?
来自MSDN的示例:
String s1 = "MyTest";
String s2 = new StringBuilder().Append("My").Append("Test").ToString();
String s3 = String.Intern(s2);
Console.WriteLine("s1 == '{0}'", s1);
Console.WriteLine("s2 == '{0}'", s2);
Console.WriteLine("s3 == '{0}'", s3);
Console.WriteLine("Is s2 the same reference as s1?: {0}", (Object)s2==(Object)s1);
Console.WriteLine("Is s3 the same reference as s1?: {0}", (Object)s3==(Object)s1);
/*
This example produces the following results:
s1 == 'MyTest'
s2 == 'MyTest'
s3 == 'MyTest'
Is s2 the same reference as s1?: False
Is s3 the same reference as s1?: True
*/
Run Code Online (Sandbox Code Playgroud)
Eri*_*ert 57
简短的回答:实习文字字符串在运行时很便宜并节省了内存.实时非文字字符串在运行时很昂贵,因此可以节省少量内存以换取常见情况.
运行中的实习字符串"优化"的成本不会为利益付出代价,因此实际上并不是优化.实习文字字符串的成本很低,因此确实可以带来好处.
我在这里更详细地回答你的问题:
http://blogs.msdn.com/b/ericlippert/archive/2009/09/28/string-interning-and-string-empty.aspx
Mik*_*uel 23
语言设计者决定实际上每个中间字符串值的成本不值得性能成本.垃圾收集字符串的实习需要一个全局弱映射,当您拥有大量线程时,它可能成为瓶颈.
| 归档时间: |
|
| 查看次数: |
5422 次 |
| 最近记录: |