我有一个应用程序,它从磁盘中的单个对象加载 170 个文件(假设它们是文本文件)并一直保存在内存中。当我从磁盘加载这些文件时,内存被分配一次。因此,不涉及内存碎片。我还使用 FastMM 来确保我的应用程序永远不会泄漏内存。
该应用程序将所有这些文件相互比较以找到相似之处。过度简化我们可以说我们比较文本字符串,但算法要复杂得多,因为我必须允许字符串之间存在一些差异。每个文件大约 300KB。加载到内存(保存它的对象)中需要大约 0.4MB 的 RAM。因此,正在运行的应用程序需要大约 60MB 或 RAM(工作集)。它处理数据大约 15 分钟。问题是它会产生超过 4000 万个页面错误。
为什么?我有大约 2GB 的可用 RAM。据我所知,页面错误很慢。他们在多大程度上减慢了我的程序?如何优化程序以减少这些页面错误?我想这与数据局部性有关。有人知道这个(Delphi)的一些示例算法吗?
更新:
但是看看页面错误的数量(任务管理器中没有其他应用程序接近我,甚至到目前为止)我想如果我设法优化内存布局(减少页面错误)我可以提高我的应用程序的速度)。
Delphi 7,Win 7 32 位,RAM 4GB(3GB 可见,2GB 免费)。