在 SMB 文件共享上对文件进行内存映射会导致在调用返回之前将其全部传输。对于大文件,这会导致应用程序长时间锁定。如何解决此问题?
“使用 X 而不是 SMB”是一个有效的答案。
编辑:任何应用程序,任何文件。我不是想解决一个具体案例。内存映射文件是一种打开文件的方式,这样它就会作为工作内存的一部分出现在应用程序中 - 你可以像访问数组一样访问文件。
答案1
这是操作系统实现的产物mmap
,与所使用的网络协议无关(尽管我喜欢批评 SMB……)。SMB 完全有能力从文件中读取随机块,因此没有理由它不能按要求读取块。我目前没有可访问的 SMB 服务器来验证这一点,但我有一个 NFS 服务器,我刚刚尝试读取一个mmap
1.7GB 的文件,它立即返回,所以至少这肯定不是 mmap 概念中的一些固有限制。