垃圾回收中的一点小知识

都知道C#中垃圾是自动回收的,但是还是有需要注意的地方。垃圾回收有三个步骤:首先检查托管代码中引用的托管对象,然后尝试析构没有被析构的对象,最后垃圾回收器释放对象并回收内存。这其中有风险,那就是如果对象被非托管代码引用时(比如Win32 API、非托管DLL,或者使用COM的方法等),该对象有可能被错误的回收,这会导致程序运行错误。还有就是,垃圾回收这些事情都是系统单独线程来进行的,这样的话,如果一个对象在一个方法中产生,那么该对象在运行期间就有可能被回收。
上面两种问题都可以用KeepAlive()来解决,例如:
private static void SafeDoWork() 
{
Example ex = new Example();
/…………
………………
………………/
GC.KeepAlive(ex);
}


这个方法是告诉系统,ex这个对象不管怎么样也要给我保持到我调用KeepAlive()的地方。要不,这个方法退出后,系统会把ex回收掉,但是ex可能还正处于运行阶段。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值