面试题之C# 内存管理与垃圾回收

你说说C# 的内存管理是怎么样的

这句话我记了一个多礼拜了, 自从上次东北师大面试之后, 具体请看<随便扯扯东北师大的面试>. 国庆闲着没事, 就大概了解了一下, 其实大二学习C# 的时候接触过, 只不过那会看的也看的懵懂, 我看的是vir in C#, 顺便查了些资料, 讲真, 看的头痛。现在过了这么久了, 学了这么久了, 再回来看看其实也不难, 当然深入去了解就gg了, 我还记得我的回答是:C# 有个GC可以自己回收, 在加上引用计数。没错, 我回答的就是这么笼统, 现在想想还是紧张了, 自己之前接触过, 其实都有印象, 下次面试不要急, 慢慢回想。

.NET 中的资源分为两类: 托管资源和非托管资源, 既然有两类资源, 那么理所当然就有两种回收方式。托管资源由CLR管理的存在于托管堆上的称为托管资源, 它是由CLR管理, 存在于托管堆上, CLR会在合适的时候调用GC进行回收。非托管资源:
比如数据库连接, 文件句柄, socket等不由CLR管理的资源, GC只回收托管资源, 不回收非托管资源。那么什么时候GC会回收内存?当一个对象的引用计数为0的时候, CLR调用GC回收内存。而相对于非托管资源来讲, 由于不受CLR的管理, 因此我们需要手动回收内存, 调用Dispose方法是个不错的选择, 但是你需要继承自IDisposable接口的类, 看看这个接口的实现:

[ComVisible(true), __DynamicallyInvokable]
public interface IDisposable
{
// Methods
[__DynamicallyInvokable]
void Dispose();
}

还有个Finalize 我没有去了解, 大概看了下, 等会我会给出链接, 你可以自己看看。我们在写数据库连接语句的时候, 经常会使用的一种写法:

using(SqlConnection = new SqlConnection(...))
{
////ADO.NET语句
}

这是比较标准的写法, 大三的时候学ado.net, 记得查资料说, 这可以保证数据库资源的正确释放, 当时没有多想, 今天查资料说, using(){}其实就是调用dispose销毁对象, 而且只有继承了idispose接口的类型才能销毁对象, 而且是try...catch...finally的简化。既然如此, 我们来看看SqlConnection类是不是实现了此接口:

[DefaultEvent("InfoMessage")]
public sealed class SqlConnection : DbConnection, ICloneable
{
// Fields
}

看看DbConnection类:

public abstract class DbConnection : Component, IDbConnection, IDisposable
{
// Fields
}

果然, 还真是如此, 就是说一旦出了using语句的控制范围, 将会自动调用dispose方法销毁对象资源.据说close方法也是调用了dispose(),看看源码:

public void Close()
{
this.Dispose(true);
}

好吧, 还真是, 如果我们手动调用ado.net的close, 那也是可以关闭数据库连接与数据库资源的。

plus:python的内存管理也是通过引用计数来控制的
一点一滴积累, 我还不信我解决不了一个破面试

C#技术漫谈之垃圾回收机制(GC)(转)

面试之C#--垃圾回收器什么时候回收?

浅谈C#垃圾回收

面试题之C# 内存管理与垃圾回收的更多相关文章

  1. C#内存管理与垃圾回收

    垃圾回收还得从根说起,就像生儿育女一样. 根:根是一个位置,存放一个指针,该指针指向托管堆中的一个对象,或是一个空指针不指向任何对象,即为null.根存在线程栈或托管堆中,大部分的跟都在线程栈上,因为 ...

  2. 使用虚幻引擎中的C++导论(四-内存管理与垃圾回收)(终)

    使用虚幻引擎中的C++导论(四)(终) 第一,这篇是我翻译的虚幻4官网的新手编程教程,原文传送门,有的翻译不太好,但大体意思差不多,请支持我O(∩_∩)O谢谢. 第二,某些细节操作,这篇文章省略了,如 ...

  3. Java之美[从菜鸟到高手演变]之JVM内存管理及垃圾回收

    很多Java面试的时候,都会问到有关Java垃圾回收的问题,提到垃圾回收肯定要涉及到JVM内存管理机制,Java语言的执行效率一直被C.C++程序员所嘲笑,其实,事实就是这样,Java在执行效率方面确 ...

  4. Java内存管理和垃圾回收

    笔记,深入理解java虚拟机 Java运行时内存区域 程序计数器,线程独占,当前线程所执行的字节码的行号指示器,每个线程需要记录下执行到哪儿了,下次调度的时候可以继续执行,这个区是唯一不会发生oom的 ...

  5. javascript中的内存管理和垃圾回收

    前面的话 不管什么程序语言,内存生命周期基本是一致的:首先,分配需要的内存:然后,使用分配到的内存:最后,释放其内存.而对于第三个步骤,何时释放内存及释放哪些变量的内存,则需要使用垃圾回收机制.本文将 ...

  6. JVM内存管理及垃圾回收【转】

    很多Java面试的时候,都会问到有关Java垃圾回收的问题,提到垃圾回收肯定要涉及到JVM内存管理机制,Java语言的执行效率一直被C.C++程序员所嘲笑,其实,事实就是这样,Java在执行效率方面确 ...

  7. .NET基础 (05)内存管理和垃圾回收

    内存管理和垃圾回收1 简述.NET中堆栈和堆的特点和差异2 执行string abc="aaa"+"bbb"+"ccc"共分配了多少内存3 ...

  8. JVM原理(Java代码编译和执行的整个过程+JVM内存管理及垃圾回收机制)

    转载注明出处: http://blog.csdn.net/cutesource/article/details/5904501 JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.e ...

  9. java Vamei快速教程22 内存管理和垃圾回收

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 整个教程中已经不时的出现一些内存管理和垃圾回收的相关知识.这里进行一个小小的总结. ...

随机推荐

  1. 最简单的基于DirectShow的示例:视频播放器图形界面版

    ===================================================== 最简单的基于DirectShow的示例文章列表: 最简单的基于DirectShow的示例:视 ...

  2. 初探linux子系统集之timer子系统(三)

    因为现在的linux虽然还是可以使用低精度的timer,但是趋势是高精度hrtimer,所以上一篇试着翻译一下hrtimer的一些介绍,翻译的不是很好,看来英语还得好好学习啊,下面还是好好学习下lin ...

  3. 02网格布局Gridlayout

    <span style="font-size:18px;"><?xml version="1.0" encoding="utf-8& ...

  4. 学生信息管理小系统(以XML为存储方式)

    为了更好地应用XML,就写了这个小项目. 下面是我的项目的目录结构 项目思路 dao是Date Access Object 数据访问层,主要是负责操作数据 domain是实体层,类似于bean层,放置 ...

  5. Leetcode_14_Longest Common Prefix

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/40555783 Longest Common Prefix ...

  6. 11、Libgdx的音频

    (官网:www.libgdx.cn) Libgdx提供了简单的方法对较小的音效和磁盘中的音乐进行回放.它同样也提供了方便的针对音频硬件的读写权限. 所有的音频操作都通过audio模块来完成: Audi ...

  7. Web资源认证原理

    Web服务器与浏览器之间的认证流程没有规定的步骤,根据不同的认证模式及鉴权方式可能会有不同的执行步骤.下图用一个最简单的流程了解整个认证过程是如何工作的,首先浏览器向服务器发起请求,然后服务器向浏览器 ...

  8. 05_学生管理系统,xml读写,布局的综合应用

     最终要做的项目目标: 2.编写Android清单文件AndroidManifest.xml <?xml version="1.0" encoding="utf ...

  9. 开源视频会议系统:OpenMeetings 安装方法

    OpenMeetings是一个多语言可定制的视频会议和协作系统.说到OpenMeetings就应该提一下red5因为OpenMeetings 的视频服务是加载red5上面的.Red5是一款基于JAVA ...

  10. 应届生求职:IT博客真能当技术型职位的求职利器?

    正值一年一度的大学毕业季,面对严峻的就业形势,700万大学毕业生,不到三成的签约率,可真是苦煞了没有工作经验,也没有项目经验的应届毕业生们.拿什么打动面试官?成绩?特长?社会实践?如果这些都不能让阅读 ...