当前位置:  开发笔记 > 编程语言 > 正文

在c#中从函数返回一个字符串时,内存是否被释放?

如何解决《在c#中从函数返回一个字符串时,内存是否被释放?》经验,为你挑选了3个好方法。

这就是我的意思:

class mycalss
{
   string myfunc()
   {
      string str="hello";
      return str;
   }
}
...
static void main()
{
   string str2;
   str2=myfunc();
   ...
   ...
}

在这种情况下,垃圾收集器是否有可能删除str2的内容,因为str超出了范围?



1> RossFabrican..:

不会.垃圾检测器会看到str2有一个对数据的引用,它不会被收集.



2> Jon Skeet..:

不,这里没有风险.将返回引用,如果垃圾收集器运行,它将能够看到引用main,因此它不会释放字符串.

需要注意的是,即使该字符串符合垃圾收集,它不会被立即释放-只有当垃圾收集器下次运行(甚至更晚,这取决于哪一代它结束了).

请注意,即使存在仍在范围内的变量,垃圾收集器也可以收集不再使用的对象 - 只要它知道该变量将不再被读取:

object x = new object();
Console.WriteLine(x);
// Lots more code not touching x
// The object could be collected at any time here



3> MSalters..:

str和str2都是对一个(字符串)对象的引用.垃圾收集器将仅回收剩余引用为零的对象.

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有