Копирование в c # выполняется очень медленно

Я пытаюсь скопировать много файлов с помощью цикла и метода CopyTo. Копия очень медленная. около 10 мб в минуту! (в отличие от щелчка правой кнопкой мыши и копирования).

Есть ли более быстрые альтернативы?


person Question    schedule 23.06.2011    source источник
comment
Прочтите FAQ, чтобы узнать, как улучшить формулировку вашего вопроса stackoverflow.com/faq   -  person Pooli    schedule 23.06.2011
comment
Я думаю, что это правильный вопрос, если задавать его правильно. Например, есть ли какой-нибудь быстрый альтернативный метод, который я могу использовать, а не метод CopyTo, который довольно медленный по сравнению с rightclick->copy->paste в C # в Window?   -  person Haris Hasan    schedule 23.06.2011
comment
Попробуйте вместо этого использовать цикл while. Меньше накладных расходов. :)   -  person Quick Joe Smith    schedule 23.06.2011
comment
@Jon Какой рецепт, это мой вопрос: P   -  person FIre Panda    schedule 23.06.2011
comment
В качестве абстрактного вопроса, я не думаю, что Microsoft улучшит это только потому, что это ваша проблема.   -  person Rosmarine Popcorn    schedule 23.06.2011


Ответы (3)


Да, используйте 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 соответствующим образом. Вы могли бы создать что-то вокруг этого, чтобы повысить его общую скорость, но небольшая настройка все равно должна обеспечить достаточно значительное улучшение.

person Grant Thomas    schedule 23.06.2011

Думаю, это поможет:

File.Copy против ручного FileStream.Write For Копирование файла

Это также объясняет, почему функция копирования работает медленно.

person Peter    schedule 23.06.2011

Самый быстрый (и наиболее удобный) способ скопировать файл - это, вероятно, File.Copy . Есть ли причина, по которой вы его не используете?

person Jon    schedule 23.06.2011