主要说说Mono托管内存的优化(非托管资源不涉及),其实主要是对GC的优化。
1.内存的分配和回收机制
首先C#数据类型有值类型(int、struct等)和引用类型。
其中值类型分配在堆栈上(不涉及GC),引用类型分配在堆区(涉及GC)。
堆栈上的分配和回收都是简单而且快捷的。
当数据存储的时候,只需要简单的在堆栈后扩展,数据失效的时候,只需要移除即可。
至于在堆区的存储和回收则是复杂而且缓慢的。
当需要在堆区存储一个对象的时候:
1.检查是否有足够的闲置的内存单元,如果有,则分配对应的内存单元。
2.如果没有闲置的内存单元,那么调用GC,它会扫描堆区上所有对象,然后标记那些不被任何其它对象所引用的对象,然后删除这些对象,释放内存空间。
3.如果此时,释放的内存空间还不够,就必须拓展堆区,拓展的大小根据不同平台有不同。
这里要说一下,当一个堆区上的变量使用完毕之后,不会马上释放,而是等待,只有GC的时候才会被回收。