惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
S
Securelist
MyScale Blog
MyScale Blog
Jina AI
Jina AI
罗磊的独立博客
The Cloudflare Blog
美团技术团队
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
雷峰网
雷峰网
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
博客园 - Franky
博客园 - 聂微东
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
T
Tailwind CSS Blog
Attack and Defense Labs
Attack and Defense Labs
博客园_首页
Latest news
Latest news
Apple Machine Learning Research
Apple Machine Learning Research
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Hacker News
The Hacker News
G
GRAHAM CLULEY
Simon Willison's Weblog
Simon Willison's Weblog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
U
Unit 42
D
Docker
Webroot Blog
Webroot Blog
N
Netflix TechBlog - Medium
T
Tor Project blog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 最新话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The Last Watchdog
The Last Watchdog
B
Blog
Recent Announcements
Recent Announcements
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
Security Latest
Security Latest
V2EX - 技术
V2EX - 技术
N
News | PayPal Newsroom
Microsoft Security Blog
Microsoft Security Blog

博客园 - 赶路人之刚出发

集成WebSecurity的Authorize进行身份验证时,数据库连接报错问题 Html.ActionLink传递参数 Automapper结合EF实现insert,update方法 MVC中使用RemoteAttribute异步远程验证 Html.RenderPartial WebMatrix.WebSecurity创建自定义用户属性 强类型view中List<Model〉问题 ViewBag任意属性的实现方法 params关键字 配置LINQ中的datacontext的log路径,以记录datacontext执行了的查询sql SortedList LINQ join/left join/cross join/group by/group join/sortedlist/cast Linq to objects示例 yield return 和 Func Lamda表达式 匿名类型与扩展方法 对象初始化器和集合初始化器 C#自动属性 .net random伪随机数
IDisposable
赶路人之刚出发 · 2013-04-19 · via 博客园 - 赶路人之刚出发

.net中所有托管资源均有GC自动回收,那非托管资源怎么办呢?

IDisposable接口就是设计用来显示释放非托管资源,如果是直接调用dispose方法,则无需再经由finalizer方法去调用this.Dispose(false)去释放托管资源,所以需在Dispose()方法中加上

GC.SuppressFinalize(this);
以提醒系统无需再调用析构函数,所有托管、非托管资源均会在Dispose(True)方法中释放,否则仍由Finzlizer方法调用Dispose(false)方法以便释放非托管资源,托管资源由GC直接回收
  public class MyBaseResourceManager : IDisposable
    {
        // Dispose是否被调用
        private bool isDisposed = false;
        protected string Name = "Name";
       
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
        protected virtual void Dispose(bool disposing)
        {
            if (!isDisposed)
            {
                if (disposing)
                {
                    //Code to 释放托管资源
                }
                //Code to 释放非托管资源
            }
            isDisposed = true;
        }
        // 析构函数只会在我们没有直接调用Dispose方法的时候调用
        // 派生类中不用在次提供析构函数
        ~MyBaseResourceManager()
        {
            Dispose(false);
        }
    }

    public class MyResourceManager : MyBaseResourceManager
    {
        private bool disposed = false;
      
        protected override void Dispose(bool disposing)
        {
            if (!disposed)
            {
                try
                {
                    if (disposing)
                    {
                        //Code To 释放托管资源
                    }
                    //Code To 释放非托管资源
                }
                finally
                {
                    base.Dispose(disposing);
                }
            }
            
        }
    }

使用Using关键字,即可在using中代码执行结束后自动调用对象mr的dispose方法,如下所示

static void Main()
        {
            using (MyResourceManager mr = new MyResourceManager())
            {
            }

 参见:http://www.cnblogs.com/carysun/archive/2008/06/15/Dispose.html