Я пытаюсь скопировать много файлов с помощью цикла и метода CopyTo. Копия очень медленная. около 10 мб в минуту! (в отличие от щелчка правой кнопкой мыши и копирования).
Есть ли более быстрые альтернативы?
Я пытаюсь скопировать много файлов с помощью цикла и метода CopyTo. Копия очень медленная. около 10 мб в минуту! (в отличие от щелчка правой кнопкой мыши и копирования).
Есть ли более быстрые альтернативы?
Да, используйте FileStream
для соответствующей буферизации. Например, что-то вроде этого должно дать вам представление:
using (var inputStream = File.Open(path, FileMode.Read),
outputStream = File.Open(path, FileMode.Create))
{
var bufferRead = -1;
var bufferLength = 4096;
var buffer = new byte[bufferLength];
while ((bufferRead = inputStream.Read(buffer, 0, bufferLength)) > 0)
{
outputStream.Write(buffer, 0, bufferRead);
}
}
Отрегулируйте bufferLength
соответствующим образом. Вы могли бы создать что-то вокруг этого, чтобы повысить его общую скорость, но небольшая настройка все равно должна обеспечить достаточно значительное улучшение.
Думаю, это поможет:
File.Copy против ручного FileStream.Write For Копирование файла
Это также объясняет, почему функция копирования работает медленно.
Самый быстрый (и наиболее удобный) способ скопировать файл - это, вероятно, File.Copy
. Есть ли причина, по которой вы его не используете?
CopyTo
, который довольно медленный по сравнению сrightclick->copy->paste
в C # в Window? - person Haris Hasan   schedule 23.06.2011