Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 应用程序/文件加载时间长_Windows_Performance_Load Time - Fatal编程技术网

Windows 应用程序/文件加载时间长

Windows 应用程序/文件加载时间长,windows,performance,load-time,Windows,Performance,Load Time,我相信很多人都注意到,当您有一个大型应用程序(即需要几MB DLL的应用程序)时,第二次加载的速度要比第一次快得多。 如果在应用程序中读取大文件,也会发生同样的情况。第一次阅读后,阅读速度要快得多 是什么影响了这一点?我想这是硬盘缓存,或者是操作系统添加了一些自己的内存缓存 您使用什么技术来加快大型应用程序和文件的加载时间 提前谢谢 注意:问题涉及Windows 补充:什么会影响操作系统的缓存大小?在某些应用程序中,文件在大约一分钟后再次缓慢加载,因此缓存会在一分钟内填满?是的,从硬盘读取的任何

我相信很多人都注意到,当您有一个大型应用程序(即需要几MB DLL的应用程序)时,第二次加载的速度要比第一次快得多。 如果在应用程序中读取大文件,也会发生同样的情况。第一次阅读后,阅读速度要快得多

是什么影响了这一点?我想这是硬盘缓存,或者是操作系统添加了一些自己的内存缓存

您使用什么技术来加快大型应用程序和文件的加载时间

提前谢谢

注意:问题涉及Windows


补充:什么会影响操作系统的缓存大小?在某些应用程序中,文件在大约一分钟后再次缓慢加载,因此缓存会在一分钟内填满?

是的,从硬盘读取的任何内容都会被缓存,以便在第二次加载时更快。基本假设是很少只使用一次来自HD的大数据块,然后丢弃它(这在实践中通常是一个很好的假设)。通常我认为是操作系统(内核)实现了缓存,占用了一大块RAM来实现,尽管我不确定现代硬盘是否具有内置缓存功能。(我曾经写过一个小型内核作为一个学术项目;在内存中缓存高清数据是它的一个特点)

是的,从硬盘读取的任何内容都会被缓存,以便在第二次加载时更快。基本假设是很少只使用一次来自HD的大数据块,然后丢弃它(这在实践中通常是一个很好的假设)。通常我认为是操作系统(内核)实现了缓存,占用了一大块RAM来实现,尽管我不确定现代硬盘是否具有内置缓存功能。(我曾经作为一个学术项目编写过一个小型内核;在内存中缓存HD数据是它的一个特性)

有两个因素可以影响这一点。第一种是硬盘缓存(由影响较小的磁盘和影响较大的操作系统完成)。第二个原因是,Windows(和其他操作系统)在完成DLL时几乎没有理由卸载DLL,除非内存用于其他用途。这是因为DLL可以在进程之间轻松共享

因此,即使在使用DLL的应用程序消失之后,DLL也有一种挂起的习惯。如果另一个应用程序决定需要DLL,它已经在内存中,只需映射到进程地址空间即可


我看到一些应用程序预加载了它们所需的DLL(通常称为QuickStart,我认为MS Office和Adobe Reader都会这样做),这样可以更好地感知加载时间。第一种是硬盘缓存(由影响较小的磁盘和影响较大的操作系统完成)。第二个原因是,Windows(和其他操作系统)在完成DLL时几乎没有理由卸载DLL,除非内存用于其他用途。这是因为DLL可以在进程之间轻松共享

因此,即使在使用DLL的应用程序消失之后,DLL也有一种挂起的习惯。如果另一个应用程序决定需要DLL,它已经在内存中,只需映射到进程地址空间即可


我看到一些应用程序预加载了它们所需的DLL(通常称为QuickStart,我认为MS Office和Adobe Reader都会这样做),这样可以更好地感知加载时间。

影响程序启动时间的另一个因素是Superfetch,这是一种(我相信)Windows XP引入的技术。本质上,它在程序启动期间监视磁盘访问,识别文件访问模式,并尝试“聚集”所需的数据以更快地访问(例如,根据加载顺序在磁盘上按顺序重新排列数据)


正如其他人所提到的,一般来说,任何读取操作都可能被Windows磁盘缓存缓存,并重复使用,除非其他操作需要内存。

影响程序启动时间的另一个因素是Superfetch,这是(我相信)Windows XP引入的一项技术。本质上,它在程序启动期间监视磁盘访问,识别文件访问模式,并尝试“聚集”所需的数据以更快地访问(例如,根据加载顺序在磁盘上按顺序重新排列数据)


正如其他人所提到的,一般来说,任何读取操作都可能被Windows磁盘缓存缓存,并重复使用,除非其他操作需要内存。

我认为有两种可能性:

  • 在系统启动时预加载您的库,正如前面提到的Office、OpenOffice和其他人正在做的那样
我不太喜欢这种解决方案:它会延长启动时间并消耗大量内存

  • 仅在需要时动态加载DLL(请参见LoadLibrary)。不幸的是,不可能与所有的DLL
例如,当您不确定是否需要时,为什么在启动时加载DLL以XYZ格式导出文件??当用户选择此导出格式时加载它

我有一个梦想,AdobeAcrobat使用这种方法,而不是让我每次想显示PDF文件时都会被大量我从未使用过的插件所困扰


根据您的需要,您可能必须同时使用这两种技术:预加载一些使用量大的Libraries和仅按需加载特定插件…

我认为有两种可能性:

  • 在系统启动时预加载您的库,正如前面提到的Office、OpenOffice和其他人正在做的那样
我不太喜欢这种解决方案:它会延长启动时间并消耗大量内存

  • 仅在需要时动态加载DLL(请参见LoadLibrary)。不幸的是,不可能与所有的DLL
例如,当您不确定是否需要时,为什么在启动时加载DLL以XYZ格式导出文件??当t时加载它