.NET程序首次运行究竟慢在哪里?
从各类资料说明就是.net程序首次运行需要编译,第二次就快了.
真的是这样吗?
本人在两年前用vb.net编程时作过如下试验:
找一台配制低的电脑,并为xp系统,低到你能感受到一个最简单的.net程序的首次运行慢.
程序A,简单功能,一个窗体,一共几十行代码. (临时设计的一个程序,文件只有几十KB,软件运行时显示一个窗
体)
程序B,复杂功能,几十个窗体,几万行代码,4个DLL库.(是一个完整的成型软件主程序约900多KB,首次运行时只
显示一个窗体)
关掉与程序无关的所有程序,包括杀毒软件和防火墙,开始试验,记录时间.
对比试验:1
重新启动系统.
运行程序A, 这是系统重新启动后的首次运行程序A, 然后再运行程序B(这是在运行程序A后)
对比试验:2
重新启动系统.
运行程序B, 这是系统重新启动后的首次运行程序B, 然后再运行程序A(这是在运行程序B后)
会有什么结果呢?
试验1: 程序B的首次加载时间与程序A相差不大
试验2: 程序A的首次加载时间远短于程序B
在试验1中程序B的首次加载运行速度要远远快于试验2中程序B的加载速度!!
在试验1中程序A的首次加载运行速度要远远慢于试验2中程序A的加载速度!!
结论:谁先运行谁"倒霉"
-----------------------------
如果从编译角度解释:程序B的编译时间应该是大于程序A,但为什么在试验1中系统刚启动时程序B的加载速度与
程序A相差无几????
我在编程环境下单步执行代码,并用进程分析工具监视进程变化,无论运行什么.net程序,.net会加载必须的几
个库(时间较长,我记不清了), 而这些库文件在加载过程中十分耗时! 它所消耗的时间要远大于你的程序首次
运行时的编译时间!
所以在试验1中程序B的首次加载运行速度要远远快于试验2中程序B的加载速度!!也就是说在试验1中程序B在首
次加载时,这个几个库已在程序A加载后运行过了.
这个试验没用什么分析工具,简凭感觉就可以明显感觉出来.条件是你的电脑配制要低!