.NET程序首次运行究竟慢在哪里?

tong04 2010-10-18 01:23:10
从各类资料说明就是.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加载后运行过了.

这个试验没用什么分析工具,简凭感觉就可以明显感觉出来.条件是你的电脑配制要低!

...全文
451 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
acgds 2010-11-06
  • 打赏
  • 举报
回复
需要加载啥啥啥的吧。。
Bullatus 2010-11-03
  • 打赏
  • 举报
回复
楼主这是提问题还是在讲解啊?
不过看着有些道理,加载类库必然耗时啊
tong04 2010-11-02
  • 打赏
  • 举报
回复
你们试验过吗?相同的程序你用My和不用My它们的加载速度是明显不同的.
tong04 2010-11-02
  • 打赏
  • 举报
回复
我用的是两个完全不同的程序在比较
tong04 2010-11-02
  • 打赏
  • 举报
回复
你们到底有没有认真看过我的试验???
wood87654321 2010-10-25
  • 打赏
  • 举报
回复
难得楼主肯于实验,不人云亦云。笼统得以编译为原因是只说其然,未说其所以然,其实关键在于编译器在编译前后(尤其是之后)究竟做了些什么,下面这文章解释得比较清楚

http://www.51edu.com/chengxu/.net/.netjiaocheng/2424010.html
porschev 2010-10-19
  • 打赏
  • 举报
回复
这个特点在学这个时应该就有说明。。
Tosp2012 2010-10-19
  • 打赏
  • 举报
回复
重新启动电脑后,第一次运行B的时间x;关闭B后再运行B(即第二次运行B)的时间y
结论:x>y

条件:你的计算机配置越低也明显。

原因:不明
wiki14 2010-10-18
  • 打赏
  • 举报
回复
重新编译,你懂的。
hztltgg 2010-10-18
  • 打赏
  • 举报
回复
这个和.net没什么关系吧,你也可以试试Photoshop,重启后第一次打开需要多久,关闭后再次打开需要多久。

.net程序首次运行慢是说第一次要编译,之后不需要编译,如果是winform,关闭后再次打开还是要在编译一次的,编译只在内存里。webform倒是第一个人访问的时候慢,第二个人访问的时候快,因为webform访问后不会关闭。

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧