属性

GC.MaxGeneration:获取系统当前支持的最大代数。

方法

GC.GetTotalMemory(bool forceFullCollection) 方法
  true表示该方法先做垃圾收集操作,之后才计算出受控代码分配的字节数。false表示不做垃圾收集,直接计算出受控代码分配的字节数。

GC.Collect

垃圾回收是基于历史经验了,当发生非重复性事件的时候,垃圾自动回收就变的不准确,这时候可用采用手动调用GC.Collect方法清除垃圾。例如在用户保存一个数据之后强制执行一次GC.Collect方法。

GC.Collect();  //强制对所有代进行即时垃圾回收。
Collect(Int32) 强制对 0 代到指定代进行即时垃圾回收。
Collect(Int32, GCCollectionMode) 强制在 GCCollectionMode 值所指定的时间对 0 代到指定代进行垃圾回收。
Collect(Int32, GCCollectionMode, Boolean) 在由 GCCollectionMode 值指定的时间,强制对 0 代到指定代进行垃圾回收,另有数值指定回收是否应该为阻碍性。
Collect(Int32, GCCollectionMode, Boolean, Boolean) 在由 GCCollectionMode 值指定的时间,强制对 0 代到指定代进行垃圾回收,另有数值指定回收应该为阻碍性还是压缩性。

GCCollectionMode:指定垃圾收集是强制的(DefaultForced指回收0~指定的代)还是optimized优化(指能释放大内存和减少碎片化才执行优化)。

using System.Runtime;
//查看GC的类型,以及工作方式。该类在using System.Runtime;命名空间 在.json或xml文件中修改
Console.WriteLine($"IsServerGC:{GCSettings.IsServerGC}");// 释放是服务器GC
Console.WriteLine($"IsServerGC:{GCSettings.LatencyMode}");// 工作方式 FGClass fG = new FGClass();
fG.MakeGarbage();
Console.WriteLine($"GetGeneration:{GC.GetGeneration(fG)}");// 获取当前垃圾对象所在的代 //检索当前认为要分配的字节数。参数指示此方法是否可以在返回之前等待一个短时间间隔,以允许系统收集垃圾和结束对象。
Console.WriteLine($"GetTotalMemory:{GC.GetTotalMemory(false) / 1024}MB");//
Console.WriteLine($"GetGeneration:{GC.GetGeneration(fG)}");// GC.Collect(0);//回收第0代
Console.WriteLine($"GetTotalMemory:{GC.GetTotalMemory(false) / 1024}MB");//
Console.WriteLine($"GetGeneration:{GC.GetGeneration(fG)}");// GC.Collect(2);//回收0~2代
Console.WriteLine($"GetTotalMemory:{GC.GetTotalMemory(false) / 1024}MB");//
Console.WriteLine($"GetGeneration:{GC.GetGeneration(fG)}");// Console.Read();
public class FGClass
{
Version vt;
public void MakeGarbage()
{ for (int i = 0; i < 100; i++)
{
vt = new Version(); } } }

GC.CollectionCount()返回自启动进程以来已经对指定代进行的垃圾回收次数。

以下这些方法是大对象回收时候用到:

CancelFullGCNotification
RegisterForFullGCNotification
WaitForFullGCApproach
WaitForFullGCComplete

AddMemoryPressure和RemoveMemoryPressure

这两个方法主要用于本地资源,比如一个位图占用了50M本地内存,但是托管对象只包含一个HBitMap(4字节或8字节)。但CRL并不知道这个内存压力,它可能允许你分配数百个位图,因为它们占用的托管内存太少了。这两个方法的目的就是要告诉GC它实际的本地资源用了多少内存量,GC知道这个信息后会调整它的垃圾回收策略,当压力变大时,他就强制执行垃圾回收。

【C# .Net GC】强制垃圾回收 和System GC的更多相关文章

  1. JAVA的垃圾回收机制(GC)

    1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制. 2.什么时候 ...

  2. java: system.gc()和垃圾回收机制finalize

    System.gc()和垃圾回收机制前的收尾方法:finalize(收尾机制) 程序退出时,为每个对象调用一次finalize方法,垃圾回收前的收尾方法 System.gc() 垃圾回收方法 clas ...

  3. System.GC.Collect();//垃圾回收,回收没有正常关闭的http连接

    System.GC.Collect();//垃圾回收,回收没有正常关闭的http连接

  4. 【转载】Java性能优化之JVM GC(垃圾回收机制)

    文章来源:https://zhuanlan.zhihu.com/p/25539690 Java的性能优化,整理出一篇文章,供以后温故知新. JVM GC(垃圾回收机制) 在学习Java GC 之前,我 ...

  5. Java性能优化之JVM GC(垃圾回收机制)

    Java的性能优化,整理出一篇文章,供以后温故知新. JVM GC(垃圾回收机制) 在学习Java GC 之前,我们需要记住一个单词:stop-the-world .它会在任何一种GC算法中发生.st ...

  6. 浅析JAVA的垃圾回收机制(GC)

    1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制. 注意:垃圾回 ...

  7. Java垃圾回收机制(GC策略)

    Java垃圾回收机制(GC策略) 核心:1,哪些是垃圾?[怎么确定这个是垃圾]:2,如何回收垃圾?[怎么更好收垃圾]. Java语言相对于C++等语言有一个自动垃圾回收机制,只用管使用[实例化对象], ...

  8. 关于GC进行垃圾回收的时机

    前言 今天查看一个同事的代码,发现代码中多处地方使用了GC.Collect()方法,我问他为什么这么做,他说感觉程序中定义了好多变量,怕GC回收不及时,用GC.Collect()可以手动掌控GC进行垃 ...

  9. C#或者.NET下的强制垃圾回收办法

    转载 2011年03月16日 17:21:00 标签: c# / .net / button / object / stream / class 8185 今天来谈谈C#的GC,也就是垃圾回收机制,非 ...

随机推荐

  1. 使用Cesium Stories来可视化时序数据

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Cesium可以用来可视化随时间变化的数据,无论是跨越数百年的地 ...

  2. QT之键盘事件

    Widget.h: #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include<QKeyEvent> #incl ...

  3. 20个 CSS 快速提升技巧

    作者:web秀 http://www.javanx.cn/20190321/css-skill/ 本文涵盖了20个css技巧,可以解决许多工作中常见的问题. 1.使用CSS重置(reset) css重 ...

  4. 【重构前端知识体系之HTML】HTML5给网页音频带来的变化

    [重构前端知识体系之HTML]HTML5给网页音频带来的变化 引言 音乐播放,相信大家都很熟悉,但是早在之前的音乐播放之前,你的浏览器会问你,是否下载flash插件.然而现在,估计一些年轻的开发者都不 ...

  5. python网络爬虫-入门(二)

    为什么要学网络爬虫 可以替代人工从网页中找到数据并复制粘贴到excel中,这种重复性的工作不仅浪费时间还一不留神还会出错----解决无法自动化和无法实时获取数据     对于这些公开数据的应用价值,我 ...

  6. Python与Javascript相互调用超详细讲解(四)使用PyNode进行Python与Node.js相互调用项(cai)目(keng)实(jing)践(yan)

    目录 前提 安装 使用 const pynode = require('@fridgerator/pynode')的时候动态链接错误 ImportError: math.cpython-39-x86_ ...

  7. MapperScan注解 放在启动器上?

    package com.aaa.zxf; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boo ...

  8. maven的三种项目打包方式----jar,war,pom

    1.pom工程:**用在父级工程或聚合工程中.用来做jar包的版本控制.必须指明这个聚合工程的打包方式为pom 2.war工程:将会打包成war,发布在服务器上的工程.如网站或服务.在SpringBo ...

  9. SimpleDateFormat简介及替代方案

    简介 SimpleDateFormat是一个时间格式化工具,可以将字符串格式化时间Date类型,也可以将Date类型格式化为字符串String类型,但其线程不安全. 常用方法 public final ...

  10. bom案例1-div拖拽

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...