关于C#垃圾回收
1.C#垃圾收集器(GC)原理
在C#中托管的资源是无法由程序员管理的,创建销毁都要通过GC来执行。但垃圾收集器有个特点,它是懒惰的,它并不会在变量出了作用域和生命期后立即回收,而是在它认为适当的时候才回收,一般是内存紧张的时候,或者是退出程序的时候。
2.析构函数
析构函数主要用来释放资源,但是析构函数在对象被垃圾收集器回收时才会调用,所以并不能指望用析构函数来对退出作用域的对象马上释放资源
3.如果想要对象退出作用域就马上释放资源要实现IDisposable接口和其中的Dispose方法,或者调用GC.Collect();但调用GC.Collect()会造成一定的性能损失。实现IDisposable接口时需要手动调用Dispose方法才会释放资源,或者使用‘using’代码块。非托管的资源使用using 代码块,在退出using 代码块也会释放资源
using (MyClass objCls =new MyClass())
{
}
4.什么时候需要实现IDisposable接口:使用非托管资源或者类是派生于实现了IDisposable接口的父类时。因为GC无法管理非托管资源,所以非托管资源需要手动释放,单对于托管资源及时释放了也不一定马上生效的
参考资料:
http://blog.csdn.net/elite7/article/details/7495941
http://bbs.csdn.net/topics/300178463
http://www.cnblogs.com/paper/archive/2009/07/31/1535998.html
http://blog.sina.com.cn/s/blog_8abeac5b01019u19.html
关于C#垃圾回收的更多相关文章
- Javascript 的执行环境(execution context)和作用域(scope)及垃圾回收
执行环境有全局执行环境和函数执行环境之分,每次进入一个新执行环境,都会创建一个搜索变量和函数的作用域链.函数的局部环境不仅有权访问函数作用于中的变量,而且可以访问其外部环境,直到全局环境.全局执行环境 ...
- 修改session垃圾回收几率
<?php //修改session垃圾回收几率 ini_set('session.gc_probability','1'); ini_set('session.gc_divisor','2'); ...
- .NET面试题系列[5] - 垃圾回收:概念与策略
面试出现频率:经常出现,但通常不会问的十分深入.通常来说,看完我这篇文章就足够应付面试了.面试时主要考察垃圾回收的基本概念,标记-压缩算法,以及对于微软的垃圾回收模板的理解.知道什么时候需要继承IDi ...
- .net垃圾回收机制编程调试试验
1. 什么是CLR GC? 它是一个基于引用跟踪和代的垃圾回收器. 从本质上,它为系统中所有活跃对象都实现了一种引用跟踪模式,如果一个对象没有任何引用指向它,那么这个对象就被认为是垃圾对象,并且可以被 ...
- Java垃圾回收
垃圾收集算法 引用计数 堆中的每个对象都有一个引用计数,当对象被引用时引用计数加1,当对象的引用被重新赋值或超出有效区域时引用计数减1,当一个对象被回收后,它所引用的对象的引用计算减1.当一个对象的引 ...
- JavaScript具有自动垃圾回收机制
JavaScript具有自动垃圾回收机制 原理: 找出那些不再继续使用的变量,然后释放其占用的内存. 正常的生命周期: 局部变量指在函数执行的过程中存在.而在这个过程中,会为局部变量在栈或 ...
- .NET 垃圾回收与内存泄漏
> 前言相信大家一定听过,看过甚至遇到过内存泄漏.在 .NET 平台也一定知道有垃圾回收器,它可以让开发人员不必担心内存的释放问题,因为它会自定管理内存.但是在 .NET 平台下进行编程,绝对不 ...
- JavaScript 垃圾回收
在公司经常会听到大牛们讨论时说道内存泄露神马的,每每都惊羡不已,最近精力主要用在了Web 开发上,读了一下<JavaScript高级程序设计>(书名很唬人,实际作者写的特别好,由浅入深)了 ...
- C#技术漫谈之垃圾回收机制(GC)
GC的前世与今生 虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是 ...
- Java的垃圾回收和内存分配策略
本文是<深入理解Java虚拟机 JVM高级特性与最佳实践>的读书笔记 在介绍Java的垃圾回收方法之前,我们先来了解一下Java虚拟机在执行Java程序的过程中把它管理的内存划分为若干个不 ...
随机推荐
- windows消息钩子注册底层机制浅析
标 题: [原创]消息钩子注册浅析 作 者: RootSuLe 时 间: 2011-06-18,23:10:34 链 接: http://bbs.pediy.com/showthread.php?t= ...
- oracle的回收站介绍
昨天做的展示oracle表空间功能剩余空间的功能,发现查询表dba_free_space时特别慢,经网上搜索,说是由于表空间碎片和回收站(Oracle 10g以后才有)引起的,后来搜到一片介绍回收站的 ...
- Java代码常用写法总结
1.字符串是否为空判断 以下是java 判断字符串是否为空的四种方法:方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||"".equal ...
- POJ 2251 题解
Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 27520 Accepted: 10776 ...
- 【JAVA】JDK-SimpleDataFormat 线程不安全!
[问题] publicclassProveNotSafe { staticSimpleDateFormat df = newSimpleDateFormat("dd-MMM-yyyy&quo ...
- 解决使用osgModeling的Loft生成管子时的bug(续)
今天发现有一些情况下, 还是无法生成管道, 排查了一天发现问题好像出在管线头两个点的x完全相同时, 会出这个问题. 看了半天的Loft源码, 发现问题出在Loft::considerBasisX函 ...
- js回调函数,字符串,数组小析
(一)回调函数:是指通过函数参数传递到其他代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序.在抖动函数中,回调函数用于在实现一些功能之后采取的另外的措施,比如div,照片抖 ...
- vs2015帮助文档
1)注释快捷键: CTRL + K - CTRL + C (注释) CTRL + K 然后 CTRL + U (取消注释) shift+"*"---------整段(取消)注释 2 ...
- javascript平时小例子⑨(小型抽奖功能)
<!doctype html><html lang="en"> <head> <meta charset="utf-8" ...
- KVM 基本命令
一.问题描述: KVM中宿主机通过console无法连接客户机,卡在这里不动了. # virsh console vm01 Connected to domain vm01 Escape charac ...