|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
就安全性而言,net网页编程已经远远低于VB.NET,更无法与安全性著称的C#相比。提及Roslyn人人一定都已有所耳闻了,这是下一代C#和VB.NET的编译器完成。Roslyn利用纯托管代码开辟,但功能凌驾之前利用C++编写的原生完成。BillChiles是Roslyn的PM(程序司理,ProgramManager),他比来写了一篇文章叫做《EssentialPerformanceFactsand.NETFrameworkTips》,个中总结了几条履历,今朝是个CodePlex上的PDF文件,今后大概会公布在MSDN上。
他在文章里谈到以下几点:
- 不要举行过早优化。程序员有了必定履历今后,常常会对功能有所直觉,但也要制止自觉优化。
- 没有评测,即是推测。比方,有的时分反复盘算都比利用哈希表举行缓存来的快。
- 好工具很主要。这里他保举了PerfView,这是个微软公布的收费工具,未来剖析某些案例时我大概也会用到这个工具。
- 功能的关头,在于内存分派。凭直觉大概良多人会以为编译器是一个CPU麋集型的场景,但实践上它毕竟仍是个IO麋集型的程序。
- 其他一些细节。比方,关于字典的内存开支要有一些观点,另有比方我每次口试城市问到的class与struct的区分等等。
第4点值很多说几句。关于托管情况来讲,GC关于功能的影响严重。假设一段程序写的不敷GC友爱,让GC产生的多,特别是那种Stop-the-WorldGC,这对功能的影响远胜某些“多花了几条拷贝指令”之类的“探究”。并且良多时分,用户眼中的“功能”在于程序的“呼应水平(responsiveness)”,一旦GC停息了一切的线程,程序便很简单产生卡顿,这乃至不是经由过程复杂评测程序功能可以表现出来的。
相较于Java平台来讲,.NET已是个绝对GC友爱的运转情况了。个中最主要的方面之一即是自界说值范例,即struct。struct让程序员举行必定水平上可控的内存分派,制止在堆上发生对象。而在Java中,只要几种原生范例是值范例,它们还不克不及包括成员。要晓得在Java里没法利用一个未装箱的int值作为一个字典的键,这对一个.NET程序员来讲大概很难设想,但现实即是云云。
固然,Java仿佛已有盘算作这方面的改善,但离真正可用还指日可待。今朝Java只能经由过程一些如逃逸剖析的手腕,发明某个对象不会被共享到堆上,因而便将其分派在栈上,制止对GC发生压力。
不外.NET供应再多对GC友爱的功效,也抵不外开辟职员的误用。Bill的文章里举了一些罕见案例,这些实在都是每一个.NET开辟职员必需懂得的基本。最初谁人例子很是风趣,他谈到,关于功能敏感的中央,偶然候都要制止LINQ或Lambda。由于利用Lambda机关匿名函数时,编译器会发生闭包,由于所谓闭包,即是一个用来保留高低文的,分派在堆上的对象。别的,如List<T>的迭代器被成心完成为struct,但利用通用的LINQ接口,则会被转化为IEnumerable<T>和IEnumerator<T>,进而发生装箱。
不足为奇,不久前@连城404在新浪微博上说到:
[quote]依照Michael的倡议把HiveTableScan关头路径上的FP作风的代码换成while轮回加可复用的mutable对象,扫表功能提拔40%。”,这实在也正和此次的话题亲切相干。
你觉得数据库怎么样? |
|