C#-资源类型_托管资源和非托管资源【Area】
创建时间:2023/6/23 15:19:55更新时间:2025/6/19 12:20:13

分为托管资源和非托管资源:

  • 托管资源指的是.NET可以自动进行回收的资源,主要是指托管堆上分配的内存资源。托管资源的回收工作是不需要人工干预的,由.NET运行库在合适时机调用垃圾回收器进行回收。
  • 非托管资源指的是.NET不知道如何回收的资源,最常见的一类非托管资源是包装操作系统资源的对象,例如:文件、窗口、网络连接、数据库连接、画刷、图标等。这类资源需要手动实现Finalize()Dispose()方法释放资源。

托管资源

.NET中的所有类型都是(直接或间接)从System.Object类型派生的。

通用类型系统(CTS)区分两种基本类型:值类型和引用类型。它们之间的根本区别在于它们在内存中的存储方式。.NET使用两种不同的物理内存快来存储数据------栈和托管堆

文档图片
文档图片

值类型在栈里,先进后出,值类型变量的生命有先后顺序,这个确保了值类型变量在退出作用域以前会释放资源。比引用类型更简单和高效。栈是从高地址往低地址分配内存。

引用类型分配在托管堆(Managed Heap)上,声明一个变量在栈上保存,当使用new创建对象时,会把对象的地址存储在这个变量里托管堆相反,从低地址往高地址分配内存,如图:

文档图片
文档图片

非托管资源

ApplicationContext, Brush, Component, ComponentDesigner, Container, Context, Cursor, FileStream, Font, Icon, Image, Matrix, Object, OdbcDataReader, OleDBDataReader, Pen, Regex, Socket, StreamWriter, Timer, Tooltip, 文件句柄, GDI资源, 数据库连接等等资源。