呵呵为什么说有难度呢?因为我GOOGLE大部分回答基本都是:软件的一部分保留在系统缓存中。可惜这个回答太笼统了。众所周知,Windows程序启动的时候需要加载很多DLL,如果某个DLL在系统启动的时候就预先加载了,那么程序启动后就不需要再在硬盘上读取,而只需要把内存中的DLL映射到该程序的地址空间即可。我做了个实验,自己写了个小程序,在启动某个软件之前先用LoadLibrary函数把它依赖的所有DLL挨个儿加载一遍,发现启动该软件的速度确实提高了一些,但是仍旧不能达到正常二次启动的速度。那到底还有什么问题呢?我不记得从哪里看到的了,LoadLibrary好像使用的是内存映射文件的技术,也就是说并不是一次性地把DLL文件都读到内存中的。另外DLL也分很多,除了普通的外还有基于COM技术的、.NET技术的等等,是不是其中还有很多不为人知的机理就不清楚了...

解决方案 »

  1.   

    找到C:\WINDOWS\Prefetch文件夹,第一次程序运行会生成.pf预读取文件,下次装载程序就不用逐个分析逐个载入映像文件,
    从而加快了启动速度。
    具体google  .pf预读取文件
      

  2.   

    估计是第一次启动需要检查和设置一些配置,设置一些标志之类的,然后再次启动时,就不用重新检查了!对于dll空间映射,你就是写个hello world,也会有很多dll要映射到你的空间中的,但是,你写个hello world的话,你会发现,就算是第N次启动,也不会快多少。
      

  3.   

    你说的很多软件,我都没感觉到.象运行QQ,第一次运行,然后关掉,第二次再运行,感觉没有特别快启动出来.你的例子是以偏概全了,或者真有这么回事,但只是在某些环境下,或只适用于某些程序.如果第一次启动和第二次启动程序时,系统的环境是一样的话,我感觉没啥不同(这里指环境相同,是指系统可用资源大致相同,例如CPU,内存等)
      

  4.   

    系统缓存, 主要是文件缓冲, 还有很多其他的一些系统数据, 如注册表...你的测试最好把exe文件也ReadFile一次, 这样应该更接近
     
      

  5.   

    缓存技术(内存缓存、CPU缓存、磁盘缓存等)
      

  6.   

    最明显的莫过于微软自己的程序了,比如Office、VS等等,第一次启动和之后的启动时间相差极大
      

  7.   

    看起来上个问题,可实际上不能称为问题。各个软件大不相同,即使现象类似,原因可能大不一样。是的,一个通用的原因,是dll如果已经加载,是会直接映射的。但是这也看具体要加载的dll是那些。---office每次启动速度不一样??打开任务管理器把所有的office进程关闭,再试试,不会有太大差异的。唯一一点比较有意思的是,office会共享进程。一般双击打开文档,会直接使用当前已经存在的进程,就会比较快。---所以,要查快慢,是需要经过具体分析的。去查查ProcMon,是一个很好很易用的工具,大略让你知道程序启动时的动作,为啥快,为啥慢。
      

  8.   


    俺再具体点说罢:说慢,
    是访问文件慢
    是加载dll慢
    是初始化属性慢
    是访问网络/网站慢
    是访问数据库慢
    是某些特殊的原因,比如去安全,慢硬盘速度慢,可归为访问文件慢
      

  9.   

    看看操作系统原理就知道了。对打开过的文件,按调度算法,系统是有缓存的。如果你多打开N个程序,再调用第一个,又快不起来了。因为不活跃。被替换出内存了。减少硬盘的I/O,才是提高速度的正道。