德尔福 – 4000万页面错误.如何解决这个问题?
我有一个应用程序,从单个对象的磁盘加载170个文件(假设它们是文本文件),并一直保存在内存中.从磁盘加载这些文件时,内存分配一次.因此,不涉及内存碎片.我还使用FastMM来确保我的应用程序永远不会泄漏内存.
应用程序将所有这些文件相互比较以查找相似之处.过度简化我们可以说我们比较文本字符串,但算法更复杂,因为我必须允许字符串之间的一些差异.每个文件大约300KB.加载到内存(保存它的对象)它需要大约0.4MB的RAM.因此,正在运行的应用程序需要大约60MB或RAM(工作集).它处理数据大约15分钟.问题是它产生了超过4000万页面错误. 为什么?我有大约2GB的可用内存.据我所知,Page Faults很慢.他们放慢了我的计划多少钱? 更新: Delphi 7,Win 7 32位,RAM 4GB(3GB可见,2GB免费). 解决方法
警告 – 我只是解决页面错误问题.
我不能确定您是否考虑使用内存映射文件?这样,windows将使用文件本身作为页面文件(而不是主页面文件pagrefile.sys).如果文件是只读的那么理论上会减少页面错误的数量,因为页面不需要通过页面文件写入磁盘,因为windows只会根据需要从文件本身加载数据. 现在要减少来自分页的文件,你需要尝试在一个方向上浏览数据,以便在读取新数据时,可以永久丢弃旧页面.这里是您再次浏览文件和缓存数据的地方 – 缓存必须存储在某处. 请注意,内存映射文件是Windows加载.dlls和.exes等的方式.我已经用它们来扫描gigabyte文件而没有达到内存限制(那时候我们有MB而不是GB的ram). 但是,根据您描述的数据,我建议不要返回ovver文件的能力会减少正在进行的重复播放量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |