关于.NET的内存管理机制
2011-12-28 22:54
246 查看
C#语言是基于windows的托管类型语言,其实托管是这里的意思是.NetFramework对内存的管理,大大减少了程序员的工作,也提升了程序的安全性,但是牺牲了运行效率。而且.NetFramework对内存的管理中不包括数据库连接对象、流对象、COM组件的释放。所以我们把上述对象称为非托管对象,非托管对象需手动释放内存。
那么C#的内存管理,我们就可以从两方面进行理解,第一,托管对象的内存管理机制;第二,非托管对象内存管理机制。
托管对象释放内存时有二个前提,一是该对象及该对象包涵的对象都没有了外部引用,二是该对象继承了IDispose接口,然后由垃圾收集器回收内存。垃圾收集器在物理上统一管理内存,而在逻辑上为执行死循环的一个线程,在循环中依次探知每一个托管对象的引用情况,若探知到对象符合上述前提时,就释放该对象的内存。从这里可以得知C#语言为何运行效率较慢的原因了。所以我们为提升运行效率的方法,就是使垃圾收集器立刻运行到需要回收内存的地方,即调用GC.Collect()即可。
托管对象的内存释放较为简单,而非托管对象的内存释放则复杂一些。
那么C#的内存管理,我们就可以从两方面进行理解,第一,托管对象的内存管理机制;第二,非托管对象内存管理机制。
托管对象释放内存时有二个前提,一是该对象及该对象包涵的对象都没有了外部引用,二是该对象继承了IDispose接口,然后由垃圾收集器回收内存。垃圾收集器在物理上统一管理内存,而在逻辑上为执行死循环的一个线程,在循环中依次探知每一个托管对象的引用情况,若探知到对象符合上述前提时,就释放该对象的内存。从这里可以得知C#语言为何运行效率较慢的原因了。所以我们为提升运行效率的方法,就是使垃圾收集器立刻运行到需要回收内存的地方,即调用GC.Collect()即可。
托管对象的内存释放较为简单,而非托管对象的内存释放则复杂一些。
相关文章推荐
- The NOTE of learning ASP.NET [18] 关于.NET(GC)内存回收机制
- 关于Cocos的内存管理机制引发一些异常的解决方案
- .NET中的内存管理,GC机制,内存释放过程,手动释放
- 关于.net编译过后的程序增加功能的一种实现方式_也可以说是.net exe注入,插件机制_开发记录
- .NET的GC内存管理与GC回收机制
- .NET中的内存管理,GC机制,内存释放过程
- .NET中的内存管理,GC机制,内存释放过程
- 关于.NET 垃圾回收机制
- .NET中的内存管理,GC机制,内存释放过程
- 关于更清楚地了解.net的垃圾回收机制
- 一起谈.NET技术,关于CLR内存管理一些深层次的讨论 [上篇]
- .NET中的内存管理,GC机制,内存释放过程
- .Net程序的内存管理和垃圾回收机制
- .NET中的内存管理,GC机制,内存释放过程
- 关于更清楚地了解.net的垃圾回收机制
- 一起谈.NET技术,关于CLR内存管理一些深层次的讨论 [下篇]
- .net关于反射加载机制问题
- .NET中的内存管理,GC机制,内存释放过程
- 关于.Net中垃圾回收机制的理解:
- .NET中的内存管理,GC机制,内存释放过程,各种内存释放方法