Pyg*_*gmy 43 c# memory-mapped-files
我有一个应用程序通过网络接收数据块,并将这些数据写入磁盘.一旦收到所有块,就可以将它们解码/重新组合成它们实际代表的单个文件.
我想知道是否使用内存映射文件是有用的 - 首先是将单个块写入磁盘,第二个是单个文件,所有这些文件都被解码.
我自己的感觉是它只对第二种情况有用,有人对此有所了解吗?
编辑:这是一个C#应用程序,我只是计划一个x64版本.(因此,遇到'最大的可用自由空间'问题应该不相关)
use*_*675 27
内存映射文件对于需要重复访问相当大的文件的较小部分(视图)的情况是有益的.
在这种情况下,操作系统可以通过仅分页进出映射文件的最近使用部分来帮助优化应用程序的整体内存使用和分页行为.
此外,内存映射文件可以暴露有趣的功能,例如写时复制或作为共享内存的基础.
对于您的方案,如果块不按顺序到达,则内存映射文件可以帮助您组装文件.但是,您仍需要提前知道最终文件大小.
此外,您应该只访问文件一次,以编写块.因此,与显式实现的异步I/O相比,性能优势不太可能,但是正确实现文件编写器可能更容易,更快捷.
在.NET 4中,Microsoft添加了对内存映射文件的支持,并且有一些包含示例代码的综合文章,例如http://blogs.msdn.com/salvapatuel/archive/2009/06/08/working-with-memory- mapped-files-in-net-4.aspx.
ker*_*vin 12
内存映射文件主要用于进程间通信或I/O性能改进.
在您的情况下,您是否想要获得更好的I/O性能?
讨厌指出这一点,但维基百科给出了一个很好的概述...... http://en.wikipedia.org/wiki/Memory-mapped_file
特别...
内存映射方法在次要页面错误中有成本 - 当一个数据块加载到页面缓存中但尚未映射到进程的虚拟内存空间时.根据具体情况,内存映射文件I/O实际上可能比标准文件I/O慢得多.
听起来你即将过早地优化速度.为什么不采用常规文件方法,然后在需要时重构MM文件?