参考
公共语言运行时 (CLR)
堆和栈
堆栈内存分配
- 堆Heap:一个程序运行时,该进程存放引用类型变量的一块儿内存,全局唯一!
- 栈Stack:先进后出数据结构,线程栈,一个线程存放变量的内存,随着线程生命周期
非托管资源清理
参考
官方文档:非托管资源清理
概述
对于应用创建的大多数对象,可以依赖 .NET 垃圾回收器来进行内存管理。 但是,如果创建包含非托管资源的对象,则当你使用完非托管资源后,必须显式释放这些资源。 最常用的非托管资源类型是包装操作系统资源的对象,如文件、窗口、网络连接或数据库连接。 虽然垃圾回收器可以跟踪封装非托管资源的对象的生存期,但无法了解如何发布并清理这些非托管资源。
非托管资源是什么
文件、窗口、网络连接或数据库连接
非托管资源怎么清理
托管资源垃圾回收GC
参考
官方文档:什么是“托管代码” 、自动内存管理 、垃圾回收期GC
概述
.NET 的垃圾回收器管理应用程序的内存分配和释放。 每当有对象新建时,公共语言运行时都会从托管堆为对象分配内存。 只要托管堆中有地址空间,运行时就会继续为新对象分配空间。 不过,内存并不是无限的。 垃圾回收器最终必须执行垃圾回收来释放一些内存。 垃圾回收器的优化引擎会根据所执行的分配来确定执行回收的最佳时机。 执行回收时,垃圾回收器会在托管堆中检查应用程序不再使用的对象,然后执行必要的操作来回收其内存。