👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。
浅谈C#中垃圾回收机制
目录
- 浅谈C#中垃圾回收机制
- 1. 为什么需要垃圾回收?
- 2. 工作原理:
- 3. 如何工作:
- 4. 垃圾回收的触发时机:
- 5. 不足和问题:
- 6. **如何优化:**
- 7. **其他:**
- 8. **非托管资源的处理:**
- 9. 举例说明
- 9.1. 对象的创建和回收
- 9.2 IDisposable 的使用
- 本期好书推荐 《C# 从入门到精通》
- 编辑推荐
- 图书特点
- 内容简介
- 作者简介
C# 中的垃圾回收 (Garbage Collection, GC) 是一种自动的内存管理机制,它帮助开发者释放不再使用的内存资源:
1. 为什么需要垃圾回收?
- 手动管理内存可能会导致内存泄漏(未释放但不再使用的内存)或者重复释放同一块内存,从而引发错误。
- 通过自动化的垃圾回收,可以减少这种错误,并确保有效利用内存资源。
2. 工作原理:
- .NET 的内存分为几个不同的世代,分别是:世代 0、世代 1 和世代 2。
- 新对象默认创建在世代 0。
- 当垃圾回收器运行时,它首先检查世代 0 中的对象。那些不再被引用的对象会被回收,仍然存活的对象则进入世代 1。
- 世代 1 和世代 2 的收集频率较低,因为较老的对象(即存在时间较长的对象)通常有更长的生命周期。
3. 如何工作:
- 垃圾回收器查找根引用(如全局变量、静态变量、活动的本地变量等)开始,然后遍历所有可访问的对象。
- 一旦所有活动的或可访问的对象都被标记后,所有其他的对象都被视为垃圾,因此可以被安全地回收。
4. 垃圾回收的触发时机:
- 当世代 0 的对象超过了一个阈值时。
- 当调用
GC.Collect()
时。 - 当系统内存不足时。
5. 不足和问题:
- GC 是有代价的。当垃圾回收器运行时,所有其他的线程可能会被暂停。
- 开发者无法明确知道何时对象会被回收。
6. 如何优化:
- 尽量减少大对象的创建,因为这可能会导致频繁的垃圾收集。
- 如果知道对象生命周期,可以使用结构(structs)而不是类(classes),因为结构在栈上分配,而不是在堆上。
- 有意识地设置长时间存活的对象为
null
,以帮助垃圾回收器更早地回收它们。
7. 其他:
Finalizers
和Dispose
方法允许对象在被回收前执行一些清理工作,例如释放非托管资源。- 强烈建议使用
using
语句来确保IDisposable
对象在使用后被正确地清理。
8. 非托管资源的处理:
- 虽然垃圾回收器会自动管理托管的内存资源,但对于非托管资源(例如文件句柄、数据库连接等),需要手动释放。
- 为此,可以实现
IDisposable
接口,并在Dispose
方法中释放这些资源。
总结,垃圾回收是.NET框架提供的一个强大工具,用于帮助开发者自动管理内存。但是,了解其工作原理和如何优化内存使用仍然是十分重要的。
9. 举例说明
下面通过一个简单的例子来说明 C# 中垃圾回收的概念:
9.1. 对象的创建和回收
public class Person
{
public string Name { get; set; }
// 析构函数(Finalizer)
~Person()
{
Console.WriteLine($"{Name} 被回收了!");
}
}
public static void Main(string[] args)
{
Person person1 = new Person() { Name = "张三" };
Person person2 = new Person() { Name = "李四" };
person1 = null; // 去除对张三的引用
person2 = null; // 去除对李四的引用
GC.Collect(); // 强制执行垃圾回收
Console.ReadLine();
}
在这个示例中,我们创建了两个 Person
对象,分别命名为张三和李四。当我们将 person1
和 person2
设置为 null
之后,这两个对象实际上已经失去了对它们的所有引用,所以它们可以被视为垃圾。通过调用 GC.Collect()
我们强制执行了垃圾回收,所以我们会在控制台上看到两条消息,表示这两个对象已经被回收。
9.2 IDisposable 的使用
public class DatabaseConnection : IDisposable
{
private bool disposed = false;
public void Open()
{
Console.WriteLine("数据库连接已打开");
}
public void Close()
{
Console.WriteLine("数据库连接已关闭");
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
Close(); // 释放托管资源
}
// 释放非托管资源(如文件句柄、网络套接字等)
disposed = true;
}
}
~DatabaseConnection()
{
Dispose(false);
}
}
public static void Main(string[] args)
{
using (DatabaseConnection dbConnection = new DatabaseConnection())
{
dbConnection.Open();
// 进行一些数据库操作
} // 在 using 语句结束时,Dispose 方法会被自动调用
Console.ReadLine();
}
在这个示例中,我们创建了一个模拟的 DatabaseConnection
类,它实现了 IDisposable
接口。我们在 Dispose
方法中关闭数据库连接并释放相关资源。使用 using
语句可以确保在对象不再使用时,Dispose
方法会被自动调用,从而释放资源。
本期好书推荐 《C# 从入门到精通》
编辑推荐
“软件开发视频大讲堂” 丛书是清华社计算机专业基础类零售图书畅销品牌之一。
(1)2008—2023年,丛书累计修订7次,销售400万册,深受广大程序员喜爱。
(2)4本荣获“全行业优畅销书”奖,1本荣获清华社“专业畅销书”一等奖,多数品种在全国计算机零售图书排行榜排行中名列前茅。
(3)实用、易懂、资源丰富,被数百所高校选为专业课教材。
图书特点
- 学通C#只需要4步:基础知识→核心技术→高级应用→项目实战,符合认知规律。
- 157集同步教学微课+强化实战训练+在线答疑,夯实基础,精准,有效,速练,适合自学。
- 233个应用实例+123个编程训练+90个综合练习+2个项目案例,学习1小时,训练10小时,从入门到项目上线,真正成为C#高手。
- 根据图书首页说明,扫描书中二维码,打开明日科技账号注册页面,填写注册信息后将自动获取C#开发资源库一年(自注册之日起)的VIP使用权限。
(1)技术资源库:348个技术要点,系统、全面,随时随地学习。
(2)技巧资源库:629个开发技巧,快速扫除盲区,掌握更多实战技巧,精准避坑。
(3)实例资源库:1583个应用实例,含大量热点实例和关键实例,巩固编程技能。
(4)项目资源库:38个实战项目,快速积累项目经验,总有一个你找工作会用到。
(5)源码资源库:1619项源代码详细分析,多读源码,快速成长。
(6)视频资源库:668集学习视频,边看视频边学习,提升更快。
(7)面试资源库:C#企业面试真题,合理职业规划,快速就业。- 在线解答,高效学习。
(1)关注清大文森学堂公众号,可获取本书的源代码、PPT课件、视频等资源。
(2)关注清大文森学堂公众号,可加入本书的学习交流群,参加图书直播答疑。
内容简介
《C#从入门到精通(第7版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用C#进行Windows应用程序开发方方面面的技术。全书分为4篇,共25章,包括初识C#及其开发环境、C#程序基本结构、变量与常量、表达式与运算符、字符与字符串、流程控制语句、数组和集合、面向对象编程、Windows窗体应用程序设计、Windows窗体应用程序常用控件、Windows窗体应用程序高级控件、数据访问技术、LINQ数据访问技术、DataGridView数据控件、程序调试与异常处理、面向对象编程进阶、文件及数据流技术、GDI+图形图像技术、Windows打印技术、网络编程技术、线程的使用、注册表技术等内容,以及贪吃蛇、五子棋、全民飞机大战、AI图像识别软件、ERP管理系统等实战项目。本书所有知识都结合具体实例进行介绍,涉及的程序代码给出了详细的注释,可以使读者轻松领会C#应用程序开发的精髓,以快速提高开发技能。
作者简介
明日科技,全称是吉林省明日科技有限公司,是一家专业从事软件开发、教育培训以及软件开发教育资源整合的高科技公司,其编写的教材非常注重选取软件开发中的必需、常用内容,同时也很注重内容的易学、方便性以及相关知识的拓展性,深受读者喜爱。其教材多次荣获“全行业优秀畅销品种”“全国高校出版社优秀畅销书”等奖项,多个品种长期位居同类图书销售排行榜的前列。
.
购买链接:
京东链接:https://item.jd.com/13791921.html
当当链接:http://product.dangdang.com/29594971.html