首页 新闻 会员 周边 捐助

C# 静态实例对象 GC能回收吗?

0
悬赏园豆:5 [已解决问题] 解决于 2016-12-15 09:31
 public static class Helper
    {
        public static userInfo currentUserInfo
        {
            get
            {
                return new userInfo() { name = "张三", age = 10 };
            }
            set { }
        }

    }
    public class userInfo
    {
        public string name { get; set; }
        public int age { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            userInfo usre = Helper.currentUserInfo;
        }
    }
usre 对象使用完后能回收吗,多长时间回收
C#
学之乐的主页 学之乐 | 初学一级 | 园豆:33
提问于:2016-12-14 18:13
< >
分享
最佳答案
0

当前的user对象不会回收,如果在调用一次currentUserInfo属性。那之前的那个user对象就能被GC回收掉

public static userInfo currentUserInfo { get { return new userInfo() { name = "张三", age = 10 }; } set { } }

可以这样理解

static userinfo _userinfo;

public static userinfo get_currentuserinfo(){

return _usrinfo=new userinfo();

//第一次执行的时候,前面的一次对象就没有引用根了(就是野对象了),也就能被GC回收了

}

收获园豆:5
czd890 | 专家六级 |园豆:14488 | 2016-12-14 23:19

然后GC的回收启动规则和你电脑有关。达到触发条件才会启动GC线程。比如分配大对象的时候内存不足了

czd890 | 园豆:14488 (专家六级) | 2016-12-14 23:21
其他回答(2)
0

GC回收的是没有被引用指向的对象.

这个能理解不.只要没有被指向就能被回收.而且没有静态实例对象这个东西.

是一个是静态引用变量指向一个对象.

吴瑞祥 | 园豆:29449 (高人七级) | 2016-12-14 18:23
0

假设你来内存管理你会怎么做?——动态分配做标记——怎么做标记?——对象引用计数器。

引用地址明显是在栈上的,栈能理解吗——有开始和结尾的这个数据结构能够简单解决,因此结束计数-1;而静态你可以当作结构root[成员],那么这个东西永远存在(相对进程生命),除非这个引用和对象内存关系解除,解除后需要马上回收资源吗?——那么这样设计会影响效能,因此可以这么设计——合适的时候回收.那什么时候合适呢 —— 微软因此为对象回收,设计了代...

花飘水流兮 | 园豆:13615 (专家六级) | 2016-12-14 20:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册