Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.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
Delphi 启动时的内存分配_Delphi_Memory - Fatal编程技术网

Delphi 启动时的内存分配

Delphi 启动时的内存分配,delphi,memory,Delphi,Memory,我使用的是Delphi10。我的一个程序在启动时从磁盘读取大量数据。当我第一次运行它时,可能需要一分钟才能完成初始任务。我关闭程序,然后重新启动。现在,同样的任务在10秒内完成。为什么会这样?在启动任务之前,是否可以通过编程方式释放内存,以首先实现短时间启动?这是因为Windows文件系统缓存。第一次文件访问速度较慢,但Windows会将信息加载到缓存中。当应用程序存在并立即再次运行时,数据将从缓存而不是磁盘读取。它与内存分配无关;这是操作系统行为的一部分 如果没有任何代码,几乎不可能提出任何可

我使用的是Delphi10。我的一个程序在启动时从磁盘读取大量数据。当我第一次运行它时,可能需要一分钟才能完成初始任务。我关闭程序,然后重新启动。现在,同样的任务在10秒内完成。为什么会这样?在启动任务之前,是否可以通过编程方式释放内存,以首先实现短时间启动?

这是因为Windows文件系统缓存。第一次文件访问速度较慢,但Windows会将信息加载到缓存中。当应用程序存在并立即再次运行时,数据将从缓存而不是磁盘读取。它与内存分配无关;这是操作系统行为的一部分


如果没有任何代码,几乎不可能提出任何可以改进应用程序性能的建议

“在启动任务之前,我是否可以通过编程释放内存,以实现一次短暂的启动?”
您对程序的运行方式做出了一个非常错误的假设。这是浪费大量时间的第一种方法。首先要检查的是在dpr中自动创建了多少表单。自动创建比主窗体多得多的内容总是一种简单易行的方法,可以减缓任何应用程序的启动速度。@Marjan:我不同意,原因有两个:1)问题是:“我的一个程序在启动时从磁盘读取大量数据。”,2)“我关闭程序,然后重新启动它。现在同样的任务在10秒内完成。”。这个问题清楚地表明了大量的磁盘I/O,而且由于.dfm流使用资源(我认为在应用程序执行之间不会缓存这些资源),因此自动创建表单的性能不应该在连续运行之间改变。不,资源可能不会被缓存,但整个exe不会在文件缓存中,特别是在它被前端到端读取以第一次加载所有这些dfm资源之后……这将取决于。在应用程序启动时,资源可能确实被缓存,但随后被从磁盘读取大量数据的行为所取代。啊,好吧,没有看到源代码,我想我们只能继续猜测…:-)