我的编程空间,编程开发者的网络收藏夹
学习永远不晚

.NET垃圾回收器怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

.NET垃圾回收器怎么使用

这篇文章主要介绍了.NET垃圾回收器怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇.NET垃圾回收器怎么使用文章都会有所收获,下面我们一起来看看吧。

.NET 应用程序中的垃圾回收器是什么?

垃圾收集器只不过是 CLR 提供的一个功能,可帮助我们清理或销毁未使用的托管对象。通过清理或销毁这些未使用的托管对象,它基本上回收内存。

当DotNet应用程序运行时,它会创建多个对象,并且在给定时刻,应用程序可能不使用其中一些对象。

因此,对于这些对象,垃圾回收器作为后台线程连续运行,并在特定的时间间隔时间,它会检查是否有任何未使用的托管对象,以及它是否发现它只是清理这些对象并回收内存。

注:垃圾回收器将仅销毁未使用的托管对象。它不清理非托管对象。

.NET垃圾回收器代数?

让我们了解什么是垃圾收集器代,它如何影响垃圾收集器的性能?

在.NET中, 有三代。它们是第0代、第1代和第2代。

了解第0代、第1代和2代

假设您有一个名为 App1 的简单应用程序。应用程序一启动,就创建 5 个托管对象。

每当创建任何新对象(新对象)时,它们都会移动到称为"第 0 代"的存储桶中。为了更好的理解,请看下图所示:

.NET垃圾回收器怎么使用

我们知道垃圾收集器作为后台线程连续运行,以检查是否有任何未使用的托管对象,以便通过清理这些对象来回收内存。

现在,假设应用程序不需要两个对象(Object1 和 Object2)。因此,垃圾回收器将销毁这两个对象(Object1 和 Object2),并回收第 0 代存储桶中的内存。

但应用程序仍然需要其余三个对象(Object3、Object4 和 Object5)。

因此,垃圾回收器不会清理这三个对象。因此,垃圾收集器将做的是,他这三个托管对象(Object3、Object4 和 Object5)将移动到第 1 代存储桶,如下图所示。

.NET垃圾回收器怎么使用

现在,假设您的应用程序又创建了两个新对象(Object6 和 Object7)。作为新对象,应在第 0 代存储桶中创建它们,如下图所示。

.NET垃圾回收器怎么使用

现在,再次运行垃圾收集器,它涉及到第 0 代存储桶和检查使用的对象。假设应用程序未使用这两个对象(Object6 和 Object7),因此它将删除这两个对象并回收内存。

现在,它转到第 1 代存储桶,并检查哪些对象未使用。假设应用程序仍然需要 Object4 和 Object5,而不需要对象 3。

因此,垃圾收集器将做什么,它将摧毁 Object3 并回收内存,以及它将 Objec4 和 Object5 移动到第 3 代存储桶,如下图所示。

.NET垃圾回收器怎么使用

什么是几代?

代不过是什么,它们将定义对象在内存中保留的时间。现在,你想到的问题是,为什么我们需要几代?

为什么我们需要几代?

通常,当我们使用大型应用程序时,它们可以创建数千个对象。因此,每个对象,如果垃圾回收器去检查他们真的是否需要,这是一个非常笨重的过程。

通过创建此类,如果第 2 代存储桶中的对象意味着"垃圾收集器"将减少对此存储桶的访问。

原因是,如果对象移动到第 2 代,则意味着它将在内存中停留更多时间。没有必要去检查他们一遍又一遍。

因此,简单地说,我们可以说第 0 代、第 1 代和 2 代有助于提高垃圾收集器的性能。第 0 代中的对象越好,性能越好,以最佳方式使用内存。

如何在类中使用析构函数,我们最终进入一个双垃圾回收器循环?

垃圾收集器将只清理托管代码。换句话说,对于任何类型的非托管代码,要清理这些代码必须由非托管代码提供,垃圾回收器无法控制它们来清理内存。

例如,假设您在 VB6 中有一个名为 MyClass 的类,然后您必须公开一些函数,例如 CLeanUp(), 在该函数中,您必须编写逻辑来清理非托管代码。

从DotNet代码中,您只需调用该方法 CLeanUp()即可启动清理。这点,或要从其中调用清理的部分是类的析构函数。

这看起来是编写清理代码的最佳地点。但是,在析构函数中编写清理时,有一个与之相关的大问题。让我们了解问题出在哪里?

在类中定义析构函数时,垃圾收集器在处置对象之前,将转到类中提出问题,您是否有析构函数,如果您有析构函数,然后将对象移动到下一代存储桶。

换句话说,即使未使用析构函数本身,它也会清理具有析构函数的对象。因此,它将等待析构函数运行,然后它会去清理对象。因此,与第 0 代相比,第 1 代和第 2 代中的对象更多。

(示例)使用析构函数

创建一个控制台应用程序,然后在程序类中复制并粘贴以下代码。

.NET垃圾回收器怎么使用

注:如果在析构函数中编写清理代码,则最终将在第 1 代和第 2 代中创建更多对象,这意味着您没有正确使用内存。

如何克服上述问题?

通过使用所谓的最终处置模式可以解决此问题。

为了实现这一点,类应实现 IDisposable 接口,并提供 Dispose 方法的实现。在 Dispose 方法中,您需要为非托管对象编写清理代码,最后需要调用 GC。通过将 true 作为输入值传递来抑制无限化(true) 方法。

此方法告诉抑制任何类型的析构函数,然后去清理对象。为了更好的理解,请看下图。

.NET垃圾回收器怎么使用

一旦您使用对象,然后您需要调用 Dispose 方法,以便双垃圾回收器循环不会发生,如下所示。

.NET垃圾回收器怎么使用

完整的代码如下:

.NET垃圾回收器怎么使用

关于“.NET垃圾回收器怎么使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“.NET垃圾回收器怎么使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

.NET垃圾回收器怎么使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

.NET垃圾回收器怎么使用

这篇文章主要介绍了.NET垃圾回收器怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇.NET垃圾回收器怎么使用文章都会有所收获,下面我们一起来看看吧。.NET 应用程序中的垃圾回收器是什么?垃圾收集器只不
2023-06-29

怎么提高.NET垃圾回收性能

本篇内容介绍了“怎么提高.NET垃圾回收性能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!对于GC垃圾回收,很多人不会陌生。我们这里讲的是提
2023-06-17

使用php7怎么实现垃圾回收机制

这篇文章给大家介绍使用php7怎么实现垃圾回收机制,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。zval 的结构// php 变量对于的c结构体struct _zval_struct { zend_value v
2023-06-15

JVM垃圾回收器是什么

这篇文章主要讲解了“JVM垃圾回收器是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JVM垃圾回收器是什么”吧!并发与并行并行(Parallel):并行描述的是多条垃圾收集器线程之间的关
2023-07-02

java垃圾回收算法怎么应用

Java中的垃圾回收算法是通过自动内存管理实现的,开发人员不需要手动去释放内存。Java中的垃圾回收算法主要有以下几种:1. 引用计数法(Reference Counting):每个对象都有一个引用计数器,当有引用指向该对象时计数器加1,引
2023-10-08

JavaScript中垃圾回收怎么优化

这篇文章将为大家详细讲解有关JavaScript中垃圾回收怎么优化,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、循环中的函数表现式,最好再利用。// 在循环中最好也别使用函数表达式。for (var
2023-06-15

Java的垃圾回收怎么理解

这篇“Java的垃圾回收怎么理解”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java的垃圾回收怎么理解”文章吧。在说记忆集
2023-06-29

高效使用Go语言的垃圾回收器

Go语言的垃圾回收器(GC)是自动执行的,无需手动管理内存。然而,为了高效使用垃圾回收器,可以考虑以下几点:1. 减少内存分配:垃圾回收器会对堆上的对象进行标记和清理,因此减少不必要的内存分配可以减轻垃圾回收的压力。可以通过复用对象池、使用
2023-10-08

怎么理解Java 垃圾回收机制

怎么理解Java 垃圾回收机制,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。什么是自动垃圾回收自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将
2023-06-05

C#垃圾回收问题怎么解决

本篇内容主要讲解“C#垃圾回收问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#垃圾回收问题怎么解决”吧!这里涉及到C#垃圾回收的问题:C#垃圾回收是.NET运行库的一部分。垃圾回收
2023-06-17

怎么理解JavaScript垃圾回收机制

本篇内容介绍了“怎么理解JavaScript垃圾回收机制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!机制说明1、找出不再使用的变量,然后释
2023-06-25

Golang中的垃圾回收怎么处理

Golang中的垃圾回收是自动进行的,并且采用了一个标记-清除算法。当程序运行时,垃圾回收器会定期检查堆中的对象,并标记那些仍然被引用的对象。然后,它会清除那些未被标记的对象,释放它们所占用的内存空间。Golang的垃圾回收器是并发的,意
Golang中的垃圾回收怎么处理
2024-03-13

Python垃圾回收机制怎么掌握

这篇文章主要介绍“Python垃圾回收机制怎么掌握”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python垃圾回收机制怎么掌握”文章能帮助大家解决问题。得益于 Python 的自动垃圾回收机制,在
2023-07-05

golang垃圾回收算法怎么实现

Go语言的垃圾回收(Garbage Collection)是由Go语言的运行时系统(runtime system)自动进行的,开发者无需手动实现。Go语言的垃圾回收算法使用了三色标记(tricolor marking)算法,具体实现如下:
2023-10-23

怎么理解Python中的垃圾回收

这篇文章主要介绍“怎么理解Python中的垃圾回收”,在日常操作中,相信很多人在怎么理解Python中的垃圾回收问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解Python中的垃圾回收”的疑惑有所帮助!
2023-06-16

Java垃圾回收机制怎么理解

这篇文章主要讲解了“Java垃圾回收机制怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java垃圾回收机制怎么理解”吧!Java垃圾回收是一个自动运行的管理程序运行时使用的内存的进程
2023-06-17

HDFS垃圾回收箱的配置及使用

本篇内容介绍了“HDFS垃圾回收箱的配置及使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!HDFS为每个用户创建一个回收站:目录:/use
2023-06-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录