摘要: C#语法简洁、优雅,类库丰富,是我最喜爱的计算机语言,没有“之一”。但是,经过深入学习后发现,C#的内存管理,也就是通常所说的垃圾回收(GC)机制,虽然跟其他支持GC的语言相比,已经很优秀了,但与手动管理内存的语言,如C++等相比,仍有差距,比如内存回收不够及时或频繁回收导致卡顿等。 我一直在... 阅读全文
posted @ 2015-10-08 17:09 ygc 阅读(577) 评论(0) 推荐(1) 编辑

2015年10月16日

摘要: 内存优化畅想系列文章已经结束了,很多读者读完之后可能觉得“然并卵”,毕竟都是给微软提的建议而已,现在都没有实现。那么为了优化内存,有没有什么我们现在就能用的技巧呢?我的答案是:有。网上关于.net内存优化的文章有许多,我不想一一转载,这里只介绍两个我自己想到的方法,如有雷同,纯属巧合。当然,我只... 阅读全文
posted @ 2015-10-16 17:30 ygc 阅读(1146) 评论(0) 推荐(1) 编辑
摘要: 前两篇文章提出的优化方法,都是不需要修改源代码的,而是在CLR或JIT层面进行自动优化的。但本文中提出的优化方法则需要引入新的语法,开发者只有在源代码中使用了这些新语法,才会获得优化。1. 允许对象“嵌入式”组合:说白了,就是允许一个对象包含其他对象(包含的是对象本身,而非其引用),这样就把多个对象... 阅读全文
posted @ 2015-10-16 16:39 ygc 阅读(910) 评论(0) 推荐(2) 编辑

2015年10月9日

摘要: 这个优化方法比较易懂,就是对于仅在方法内部用到的对象,不再分配在堆上,而是直接在栈上分配,方法结束后立即回收,这将大大减轻GC的压力。 其实,这个优化方法就是java里的逃逸分析,不知为何.net里没有引入。英文讨论贴:https://github.com/dotnet/coreclr/iss... 阅读全文
posted @ 2015-10-09 18:03 ygc 阅读(700) 评论(1) 推荐(1) 编辑

2015年10月8日

摘要: 我们都知道,.net的GC是不会压缩大对象堆的,因为其时间开销不可接受,但这是以大对象堆产生大块碎片为代价的,如果以后要分配的大对象比最大的碎片还大,那么即使它比所有碎片的总大小要小,也是无法在不扩展大对象堆的前提下分配成功的,此时有可能引发内存不足的异常。 我想到一个方案,可以让大对象堆也能... 阅读全文
posted @ 2015-10-08 17:23 ygc 阅读(2175) 评论(0) 推荐(1) 编辑

导航