A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐宏伟 中级黑马   /  2012-9-10 11:30  /  1643 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、在C++里面,每当我们需要一块内存的时候,就得自己去申请,等自己用完之后就得自己处理或者说成是清理,有点自给自足的意思;

2、在C#里面,我们每当需要一块空间(内存)的时候,我们果断拉出我们的法宝关键字“new”,然后就使劲的用,用完之后就拍屁股走人,有点富二代的意思;

3、这些话说都是伟大的微软给我们做的,微软就是我们的服务员;

但是我想知道的是在C++里面只要一不小心就会涉及到内存泄露,不知道在C#里面会不会出现内存泄露呢?如果有的话,都是在哪些情况下泄露的?泄露之后如何处理?

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

4 个回复

倒序浏览
在C#里面有GC 这个垃圾自动回收机制,由于GC的回收发生的时间是不确定的,偶尔发生程序死机是有可能的,但在垃圾处理机制来看C#比起C++强多了。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
如何你了解CLR真正的垃圾回收机制,就应该知道:其实我们甚至不能显示地释放内存,垃圾收集器会按照一定的算法在特定的时候回收不再被使用的内存空间(摘自《.net框架程序设计》)。所以很多书讲用完之后的dispose和置空引用本质上是“白忙”的!它至多能提早让那些变量变成垃圾罢了。如果你想如此,最好就用using关键字,举个简单的例子:
using(Graphics.Path p=new Graphics.Path())
{
     //这里就不用再 p.Dispose(),因为会自动调用      
}

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
许庭洲 发表于 2012-9-10 11:36
在C#里面有GC 这个垃圾自动回收机制,由于GC的回收发生的时间是不确定的,偶尔发生程序死机是有可能的,但 ...

难道我们就不用多考虑什么?尽情的挥洒new………………
回复 使用道具 举报
Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。oh,yeah

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马