.Net 中的托管资源和非托管资源
2012-09-28 15:19
288 查看
.NET中的所有类型都是(直接或间接)从System.Object类型派生的。
CTS中的类型被分成两大类——引用类型(reference type,又叫托管类型[managed type]),分配在内存堆上;值类型(value type),分配在堆栈上。如图:
首先说下在栈和堆在window中的区别,栈是向低地址扩展的数据结构,是一块连续的内存区域,先进后出的。而堆是向高地址扩展的数据结构,是不连续的内存区域,顺序随意的。
值类型在栈里,先进后出,值类型变量的生命有先后顺序,这个确保了值类型变量在退出作用域以前会释放资源。比引用类型更简单和高效。堆栈是从高地址往低地址分配内存。
引用类型分配在托管堆(Managed Heap)上,声明一个变量在栈上保存,当使用new创建对象时,会把对象的地址存储在这个变量里。托管堆相反,从低地址往高地址分配内存,如图:
.NET中超过80%的资源都是托管资源。
非托管资源:
ApplicationContext, Brush, Component, ComponentDesigner, Container, Context, Cursor, FileStream, Font, Icon, Image, Matrix, Object, OdbcDataReader, OleDBDataReader, Pen, Regex, Socket, StreamWriter, Timer, Tooltip, 文件句柄, GDI资源, 数据库连接等等资源。可能在使用的时候很多都没有注意到!
CTS中的类型被分成两大类——引用类型(reference type,又叫托管类型[managed type]),分配在内存堆上;值类型(value type),分配在堆栈上。如图:
首先说下在栈和堆在window中的区别,栈是向低地址扩展的数据结构,是一块连续的内存区域,先进后出的。而堆是向高地址扩展的数据结构,是不连续的内存区域,顺序随意的。
值类型在栈里,先进后出,值类型变量的生命有先后顺序,这个确保了值类型变量在退出作用域以前会释放资源。比引用类型更简单和高效。堆栈是从高地址往低地址分配内存。
引用类型分配在托管堆(Managed Heap)上,声明一个变量在栈上保存,当使用new创建对象时,会把对象的地址存储在这个变量里。托管堆相反,从低地址往高地址分配内存,如图:
.NET中超过80%的资源都是托管资源。
非托管资源:
ApplicationContext, Brush, Component, ComponentDesigner, Container, Context, Cursor, FileStream, Font, Icon, Image, Matrix, Object, OdbcDataReader, OleDBDataReader, Pen, Regex, Socket, StreamWriter, Timer, Tooltip, 文件句柄, GDI资源, 数据库连接等等资源。可能在使用的时候很多都没有注意到!
相关文章推荐
- 是否可以完全相信垃圾回收?.Net 托管资源 非托管资源 垃圾回收 的疑问。
- 是否可以完全相信垃圾回收?.Net 托管资源 非托管资源 垃圾回收 的疑问。
- c#中的托管资源和非托管资源的释放问题
- .Net之托管堆资源分配
- 《Effective C#》快速笔记(二)- .NET 资源托管
- Net 托管资源 非托管资源 垃圾回收
- C# 托管资源 与 非托管资源
- 浅谈.NET非托管资源垃圾回收与程序资源优化(弱引用)
- "资源托管"及"非托管资源"问题 --- 创建MDB文件时如何释放LDB为例
- .NET.GC 浅谈.net托管程序中的资源释放问题
- .net中的托管资源与非托管资源
- [转].NET.GC 浅谈.net托管程序中的资源释放问题
- .NET.GC 浅谈.net托管程序中的资源释放问题 (转帖)
- 托管资源非托管资源
- 托管资源和非托管资源
- 托管资源和非托管资源
- (转)c#托管资源和非托管资源区别
- 托管资源和非托管资源
- 对于托管资源和非托管资源的理解
- C# 托管资源 与 非托管资源