从上面内容可以看到,从Console.ReadLine接收到的引用地址是 0x000002cb1a555f28 ,虽然是相同内容,但却没有使用驻留池,这是因为驻留池在JIT静态解析期就已经解析完成了,也就无法享受复用之优,如果还想复用的话,在 Console.ReadLine() 包一层string.Intern即可,如下所示:
public static void Main(string[] args)
{
var str1 = "nihao";
var str2 = "nihao";
var str3 = string.Intern(Console.ReadLine());
Console.WriteLine("输入完成!");
Console.ReadLine();
}
ConsoleApp2.Program.Main(System.String[]) [C:dreamCsharpConsoleApp1ConsoleApp2Program.cs @ 33]
LOCALS:
0x0000008fac1fe9c8 = 0x000001ff46582d48
0x0000008fac1fe9c0 = 0x000001ff46582d48
0x0000008fac1fe9b8 = 0x000001ff46582d48
可以看到这个时候str1,str2,str3共享一个内存地址 0x000001ff46582d48。
四: 总结
驻留池技术是个很🐮👃的东西,很好的解决字符串在堆上的重复分配问题,大大减小了堆的内存占用,但也要明白运行期的IO输入无法共享驻留池的解决方案。
好了,本篇就说到这里,希望对你有帮助!
以上就是浅谈C#中的string驻留池的详细内容,更多关于C# string驻留池的资料请关注易采站长站其它相关文章!










