属性

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:指定垃圾收集是强制的(Default或Forced指回收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. Choregraphe 2.8.6.23动作失效

    动作和动画执行完以后,无法自动还原成默认状态,自然接下来动作无法执行了.之后各种操作可能诱发软件原有的bug.需要开关自主生活模块才能恢复. 部分连贯的动作不需要恢复就能执行,动画不行. 站立动作好像 ...

  2. 【必杀】为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。

    之前写过一篇文章,https://www.cnblogs.com/qidian10/p/6028784.html 解释如何解决此类问题,但现在回过头来想一下,之前的文章还是太过浅显,无法完全有效的彻底 ...

  3. gin中绑定uri

    package main import ( "github.com/gin-gonic/gin" "net/http" ) type Person struct ...

  4. linux关闭swap

    #(1)临时关闭swap分区, 重启失效; swapoff -a #(2)永久关闭swap分区 sed -ri 's/.*swap.*/#&/' /etc/fstab 也可以在sysctl.c ...

  5. 边带权并查集 学习笔记 & 洛谷P1196 [NOI2002] 银河英雄传说 题解

    花了2h总算把边带权并查集整明白了qaq 1.边带权并查集的用途 众所周知,并查集擅长维护与可传递关系有关的信息.然而我们有时会发现并查集所维护的信息不够用,这时"边带权并查集"就 ...

  6. C++ DLL注入工具完整源码

    先上源码 #include "Inject_Main.h" #include "resource.h" #include <Windows.h> # ...

  7. 右键没有word?excel?ppt?注解表该改改啦

    ✿[office 2019]office2010版本以上的都可以(例如:office 2010.office 2016.office 2019) 一.快速方法解决右键没有word: 在电脑桌面右键一个 ...

  8. Linux中date命令用法

    1.以下是服务器现在的时间,当前时间的各种表示方法,表示成自己想要的时间格式,后面的范例将会在这个时间基础之上进行演示,同时这也是熟练掌握后面各种date命令的前提,请读者注意 [root@RHEL6 ...

  9. Java中的String,StringBuilder,StringBuffer三者的区别?

    package com.aaa.zxf.ajax.test; /** * 弄清楚 string stringBuilder StringBuffer 三者之间的关系? * * * 一. 三者都是用来对 ...

  10. Ubuntu 配置数据库开发环境(mysql oracle mssqlserver sybase)

    1.mysql sudo apt-get install libmysql++-dev //mysql连接库 2.ms sql server/sybase ./configure --prefix=/ ...