В последнее время у меня возникли проблемы с чтением больших файлов на сетевом диске, и я просто не могу определить, что я делаю неправильно. Я пробовал как на С++ (неуправляемый), так и на С#, и на обоих у меня были примерно одинаковые характеристики ... которые были несколько ужасными.
Иногда он будет читать файл в сети со скоростью 4 КБ/с, но если этот файл находится на локальном жестком диске, он легко достигнет максимальной скорости передачи данных, которую может выводить жесткий диск. То есть с чтением кусков по 64 КБ за раз ... Я пробовал с большими буферами до безумных чисел или меньше, и это не имеет большого значения.
Я пробовал асинхронный ввод-вывод в C# с BeginRead в FileStream и OVERLAPPED IO в C++, а также синхронное чтение, и все они имели одинаковые проблемы, которые замедлялись в сети.
Единственное решение, которое мы придумали, — это скопировать файл с помощью функции OS CopyFile на локальный жесткий диск перед фактическим чтением файла, но я не слишком доволен этим подходом. Просто кажется, что CopyFile делает что-то, чего мы не делаем, что делает его невероятно быстрее, чем наш подход.
Кто-нибудь знает, почему это так?