C# using的使用-资源回收
using (Line line = new Line()){// 设置线条长度line.setLength(6.0);Console.WriteLine("线条的长度: {0}", line.getLength());}
using {}里面的代码执行完成后,会自动调用对象的 Dispose()方法。
但是对象的析构函数不会被调用,只有当系统判断该对象不再使用时才会被自动调用。
所以:
![]() |
---|
不应使用空析构函数。如果类包含析构函数,Finalize 队列中则会创建一个项。调用析构函数时,将调用垃圾回收器来处理该队列。如果析构函数为空,则只会导致不必要的性能丢失。 |
using 语句中使用的类型必须继承并实现接口“System.IDisposable”
class Line : System.IDisposable{private double length; // 线条的长度public Line() // 构造函数{Console.WriteLine("对象已创建");}~Line() //析构函数{Console.WriteLine("对象已删除");}public void setLength(double len){length = len;}public double getLength(){return length;}public void Dispose(){Console.WriteLine("对象已Dispose");}}
程序员无法控制何时调用析构函数,因为这是由垃圾回收器决定的。垃圾回收器检查是否存在应用程序不再使用的对象。如果垃圾回收器认为某个对象符合析构,则调用析构函数(如果有)并回收用来存储此对象的内存。程序退出时也会调用析构函数。
可以通过调用 Collect 强制进行垃圾回收,但大多数情况下应避免这样做,因为这样会导致性能问题。有关更多信息,请参见强制垃圾回收。
使用析构函数释放资源
通常,与运行时不进行垃圾回收的编程语言相比,C# 无需太多的内存管理。这是因为 .NET Framework 垃圾回收器会隐式地管理对象的内存分配和释放。但是,当应用程序封装窗口、文件和网络连接这类非托管资源时,应当使用析构函数释放这些资源。当对象符合析构时,垃圾回收器将运行对象的 Finalize 方法。
源的显式释放
如果您的应用程序在使用昂贵的外部资源,则还建议您提供一种在垃圾回收器释放对象前显式地释放资源的方式。可通过实现来自 IDisposable 接口的 Dispose 方法来完成这一点,该方法为对象执行必要的清理。这样可大大提高应用程序的性能。即使有这种对资源的显式控制,析构函数也是一种保护措施,可用来在对 Dispose 方法的调用失败时清理资源。
using的用法:
1. using指令:引入命名空间
这是最常见的用法,例如:
using System; using Namespace1.SubNameSpace;
2. using static 指令:指定无需指定类型名称即可访问其静态成员的类型
using static System.Math;var = PI; // 直接使用System.Math.PI
3. 起别名
using Project = PC.MyCompany.Project;
4. using语句:将实例与代码绑定
using (Font font3 = new Font("Arial", 10.0f),font4 = new Font("Arial", 10.0f)) {// Use font3 and font4. }
代码段结束时,自动调用font3和font4的Dispose方法,释放实例。
参考资料
C# using的使用-资源回收相关推荐
- Linux线程退出、资源回收、资源清理的方法
首先说明线程中要回收哪些资源,理解清楚了这点之后在思考资源回收的问题. 1.子线程创建时从父线程copy出来的栈内存; 线程退出有多种方式,如return,pthread_exit,pthread_c ...
- java手动回收_浅谈java是如何做资源回收补救的
学习java的过程,我们经常谈论一个对象的回收,尤其是资源类型,如果没有显示的关闭,对象就被回收了,说明出现了资源泄漏.java本身为了防止这种情况,做了一些担保的方式,确保可以让未关闭的资源合理回收 ...
- java 线程池 资源回收_JAVA线程池资源回收的问题
最近项目中为了提高用户体验度,前台创建任务后台任务,用多线程来跑. 现在的场景:后台定时任务管理这两个线程池,一个最大线程数10个,一个最大线程数15.应用部署之后,不超过5个小时,服务器负载高,内存 ...
- linux 线程退出资源回收,有关linux线程资源回收的有关问题
有关linux线程资源回收的问题 使用linux c编程的,开启一个线程,这个线程中申请了一些资源.如果需要这个线程马上取消并且回收申请的资源怎么办啊? 前面使用了pthread_cancel()这个 ...
- HelloBird——资源回收o2o平台
项目介绍 "HelloBird"是一个基于微信小程序搭建的资源回收o2o平台,目的是为了实现废旧资源的流转.在"HelloBird"中,用户可以轻松的获取生活 ...
- 再生资源回收市场竞争分析
中国报告大厅网讯,在高科技时代下,许多资源可在此回收利用.再生资源的种类有很多,汽车轮胎.金属.塑料等都可以二次利用.全球各国都在大力发展可再生资源行业.以下是对再生资源回收市场竞争分析. 再 ...
- CreateCompatibleBitmap,关于兼容DC的创建与资源回收
其实,我的C++入门就是从GDI开始的,想在CE上面写应用程序,若兼程序界面太难看那就必须用回GDI了.GDI是一种古老而又非常麻烦的技术,在C#年代还好点,但VC++下,玩GDI记得最最重要的一点是 ...
- 基于微信小程序的再生资源回收平台设计与开发(论文+程序设计源码+数据库文件)
1 绪论 2 1.1 项目开发背景 2 1.2 项目开发意义 2 1.3 项目主要的内容 2 2 相关技术介绍及系统环境开发条件 3 2.1相关技术介绍 3 2.2系统环境开发条件 4 3 系统的需求 ...
- 借势良政 环卫及再生资源回收行业现“蹄疾步稳”
近年来,在国家发展循环经济相关政策和环卫相关政策的推动下,再生资源回收行业和环卫行业稳步发展. 再生资源行业发展状况2013年我国再生资源回收企业已达10多万家,从业人员约为1800万人,废钢铁.废有 ...
- java 线程回收_JAVA线程池资源回收的问题
最近项目中为了提高用户体验度,前台创建任务后台任务,用多线程来跑. 现在的场景:后台定时任务管理这两个线程池,一个最大线程数10个,一个最大线程数15.应用部署之后,不超过5个小时,服务器负载高,内存 ...
最新文章
- AI一分钟 | NLP先驱Aravind Joshi教授去世,曾获ACL终身成就奖;年度花木兰诞生,甘薇全权负责贾跃亭的一地鸡毛
- A simple Test Client built on top of ASP.NET Web API Help Page
- [Python3网络爬虫开发实战] 1.7.1-Charles的安装
- http get 传参最大长度介绍
- 第六讲 使用第三方库及简单网页
- sendmessage和postmessage的区别
- 远程桌面漏洞poc_十万火急,速打补丁!Windows RDP服务蠕虫级漏洞攻击被公开
- 首选System.lineSeparator()以用Java编写系统相关的行分隔符字符串
- php fping,【Linux 命令】fping ping 包间隔时间详解
- KICKSTART 语法参考
- php线程安全和非线程安全_安全调用线程的步骤
- 图片上传经过jwt_SpringSecurity整合Jwt过程图解
- 【UVA10256】The Great Divide(凸包相离判定)
- java生成pdf带图片_(例)Java生成PDF图片 iText
- mapping的介绍和实战
- MS发起的PDP上下文激活过程----PPP和PDP激活是什么区别
- 采样点数、采样率、采样频率、平均采样次数
- R语言使用diag函数生成一个N行N列的单位矩阵
- 2021安徽高考体考成绩查询,2021年安徽体育专业考试成绩查询网址:https://www.ahzsks.cn/...
- K-means算法及文本聚类实践
热门文章
- 命名管道(FIFO)
- python 双曲函数 生成和demo
- FFMpeg框架代码阅读(转)
- 桌面计算机密码应由哪项组成,福师《计算机应用基础》在线作业一
- IBM Rational Purify 在vs2003中 找不到memory leak之解决方案
- LoadRunnerp Professional 2021
- VC6.0功能之-生成excel文件
- 你知道什么时候用@PostMapping和@GetMapping吗?
- 集合、Collection、List
- 关于【科技中的设计师】,这可能是最走心的一篇文章