C#之ILC和C++的CLR前者更快?

楔子

ILC是C#写的,CLR是C++。.Net 7中,为何微软执意用一个托管的模型去尝试取代非托管框架呢?至少native code方面它是这么做的

这个问题一直萦绕脑海。.

非托管和托管

十年前出版的那本久负盛名的《CLR via C#》至今都是不可或缺的存在,它里面有句话说的是:一些理由使我们相信未来的托管代码在执行效率上会比当前的非托管代码更优秀。大多数托管应用程序目前的性能已相当不错,将来还有望进一步提升。

而十年前的未来,也就是现在。

方面

一:要看快,从结果方面看,也就是托管函数运行的效率,速度。ILC作为全员预编译,比CLR便加载内存,边编译,遇到函数就编译是要快很多的。

二:从过程方面,ILC的运行速度远不如C++这种系统级语言来的更快。但是.Net本身是个托管的框架,它负责的或者执行的是被JIT之后的结果。所以无论ILC过程多慢,只要ILC的结果快于CLR运行的过程,ILC依然比CLR快。

结构

谷歌有个golang语言,它的runtime就是自举的,也就是runtime用go语言写的。微软估计也想搞这种方向,把.Net runtime搞成C#写的,至少目前看来,native code这块是实现了这点。

那么将来微软的技术体系模型,runtime这块大约只有托管dll和ILC这两项了。前者作为参数进行析构,后者则承担了之前CLR和JIT的大部分工作。并且还承担了LLVM和写目标文件的重任。

结尾

微软体系的技术更新,有点快。
本文作者:江湖评谈(公众号同名)