
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Roslyn大家肯定已经有所耳闻了,这是下一代C#和VB.Net的编译器实现。Roslyn使用纯托管代码开发,但性能超过之前使用C++编写的原生实现。下面佛山达内的小编来分享一篇文章!
1.要进行过早优化。程序员有了一定经验以后,往往会对性能有所直觉,但也要避免盲目优化。
2.有评测,便是猜测。例如,有的时候重复计算都比使用哈希表进行缓存来的快。
3,工具很重要。这里他推荐了PerfView,这是个微软发布的免费工具,将来分析某些案例时我可能也会用到这个工具。
4.能的关键,在于内存分配。凭直觉可能很多人会觉得编译器是一个CPU密集型的场景,但实际上它终究还是个IO密集型的程序。
5他一些细节。例如,对于字典的内存开销要有一些概念,还有例如我每次面试都会问到的class与struct的区别等等。
此外,佛山达内培训的小编还了解到,对于托管环境来说,GC对于性能的影响重大。假如一段程序写的不够GC友好,让GC发生的多,尤其是那种Stop-the-World GC,这对性能的影响远胜某些“多花了几条拷贝指令”之类的“探索”。而且很多时候,用户眼中的“性能”在于程序的“响应程度(responsiveness)”,一旦GC暂停了所有的线程,程序便很容易发生卡顿,这甚至不是通过简单评测程序性能能够体现出来的。
相较于Java平台来说,.Net已经是个相对GC友好的运行环境了。其中最重要的方面之一便是自定义值类型,即struct。struct让程序员进行一定程度上可控的内存分配,避免在堆上产生对象。而在Java中,只有几种原生类型是值类型,它们还不能包含成员。要知道在Java里无法使用一个未装箱的int值作为一个字典的键,这对一个.Net程序员来说可能很难想象,但事实便是如此。
当然,Java似乎已经有打算作这方面的改进,但离真正可用还遥遥无期。目前Java只能通过一些如逃逸分析的手段,发现某个对象不会被共享到堆上,于是便将其分配在栈上,避免对GC产生压力。(以上内容来源于酷勤网)
达内7天免费试听课程活动正式启动啦!限额报名,先报先得!