Сопоставление памяти файла с файловым ресурсом SMB приводит к тому, что он полностью передается перед возвратом вызова. Для больших файлов это приводит к зависанию приложения на длительный период времени. Как мне это исправить?
«Использовать X вместо SMB» - правильный ответ.
Редактировать: Любое приложение, любой файл. Я не пытаюсь раскрыть конкретный случай. Отображение файла в память - это способ его открытия, чтобы он представлялся приложению как часть рабочей памяти - вы обращаетесь к файлу как к массиву.
Это артефакт реализации операционной системы mmap
, не имеющий ничего общего с используемым сетевым протоколом (как бы я ни любил трепаться по SMB .. .). SMB более чем способен читать случайные фрагменты из файла, поэтому нет причин, по которым он не может читать фрагменты по запросу. У меня нет SMB-сервера, доступного в данный момент для проверки, но у меня есть NFS-сервер, и я просто попытался mmap
файл размером 1,7 ГБ, и он вернулся мгновенно, так что по крайней мере это определенно не какое-то внутреннее ограничение в концепции mmap.