已关闭。此问题需要更多focused。目前不接受回答。
**要改进此问题吗?**更新此问题,使其仅针对editing this post的一个问题。
6年前关闭。
社区在6天前审查了是否重新打开此问题,并将其关闭:
原始关闭原因未解决
Improve this question的
使用内存Map文件读取(常规大小的文件)与使用内存Map文件读取文件组合进行相同操作相比,有哪些缺点(如果有的话)?
已关闭。此问题需要更多focused。目前不接受回答。
**要改进此问题吗?**更新此问题,使其仅针对editing this post的一个问题。
6年前关闭。
社区在6天前审查了是否重新打开此问题,并将其关闭:
原始关闭原因未解决
Improve this question的
使用内存Map文件读取(常规大小的文件)与使用内存Map文件读取文件组合进行相同操作相比,有哪些缺点(如果有的话)?
3条答案
按热度按时间ddarikpa1#
使用ReadFile/WriteFile你有确定性的错误处理语义。当你使用内存Map文件时,错误通过抛出异常返回。
此外,如果内存Map文件必须访问磁盘(或者更糟的是,访问网络),那么您的内存读取可能需要几秒钟(甚至几分钟)才能完成。根据您的应用程序,这可能会导致意外的停顿。
如果使用ReadFile/WriteFile,则可以使用API的异步变体来控制此行为。
如果您使用ReadFile,您还可以获得更确定的性能,特别是如果您的I/O模式是可预测的-内存MapI/O通常是随机的,而ReadFile几乎总是串行的(因为ReadFile在当前文件位置读取并推进当前文件位置)。
rqdpfwrv2#
文件Map的一个很大的优点是它不会影响系统缓存。如果你的应用程序通过ReadFile进行过多的I/O,你的系统缓存将增长,消耗越来越多的物理内存。如果你的操作系统是32位的,你有超过1GB的内存,那么你很幸运,因为在32位Windows上,系统缓存的大小限制为1GB。否则,系统缓存将消耗所有可用的物理内存,内存管理器将很快开始将其他进程的页面清除到磁盘,强化磁盘操作,而不是实际上减少它们。这种效果在64位Windows上尤其明显,其中该高速缓存大小仅受可用物理内存的限制。另一方面,文件Map不会导致系统缓存过度增长,同时也不会降低性能。
xhv8bpkk3#
建立文件Map需要比打开和阅读更复杂的代码。文件Map用于随机访问文件的某个部分。如果不需要,就不要麻烦文件Map。
另外,如果需要将代码移植到另一个平台上,如果不使用文件Map,那么可以更容易、更快地完成。