我有一个转换文件的程序。它采用输入文件名和输出文件名,从一个读取并写入另一个,并进行一些修改。我有源,但它很大,我没有清楚的操作图。我可以说在读写模式(_O_RDWR)中使用_wsopen_s打开文件,并且在开放时间似乎没有任何有趣的业务。
出于某种原因,当我尝试将此程序与某个大型输入文件一起使用时,会发生以下情况。首先,物理内存使用量和文件系统缓存使用的内存量(由任务管理器报告)上升。看来,对于读取的每个字节和写入的字节,内存使用量增加了2个字节。请注意,这是操作系统拥有的内存:提交大小和实际可执行文件的工作集大小保持不变。
然后,当文件系统缓存大小接近总可用内存时,操作系统开始将正在运行的程序交换到页面文件中,最终系统无响应。
该计划的作者说,他们没有看到这种行为,他们不知道为什么会这样。
在我正式提出这个错误并尝试让他们修复它之前(这可能需要很长时间,我现在需要该程序):
这在x64 Vista Home Premium SP2上发生。
答案 0 :(得分:0)
如果程序使用与输入文件成正比的内存,那么程序似乎试图一次性将所有内容读入内存缓冲区。
改进它的一种典型方法是,读入缓冲区,限制为200kb或更大,并进行处理,并将转换后的数据写入输出文件。这样,它就不会耗尽系统内存。