面试题之C# 内存管理与垃圾回收
你说说C# 的内存管理是怎么样的
这句话我记了一个多礼拜了, 自从上次东北师大面试之后, 具体请看师大的面试>....非托管资源:
比如数据库连接, 文件句柄, socket等不由CLR管理的资源, GC只回收托管资源, 不回收非托管资源。那么什么时候GC会回收内存?...我们在写数据库连接语句的时候, 经常会使用的一种写法:
using(SqlConnection = new SqlConnection(...))
{
////ADO.NET语句
}
这是比较标准的写法..., 大三的时候学ado.net, 记得查资料说, 这可以保证数据库资源的正确释放, 当时没有多想, 今天查资料说, using(){}其实就是调用dispose销毁对象, 而且只有继承了idispose...方法也是调用了dispose(),看看源码:
public void Close()
{
this.Dispose(true);
}
好吧, 还真是, 如果我们手动调用ado.net的close, 那也是可以关闭数据库连接与数据库资源的