浅谈C#中的string驻留池

2020-06-24 18:02:40刘景俊

从上面内容可以看到,从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驻留池的资料请关注易采站长站其它相关文章!