Если у нас есть успешная сборка на нашем сервере сборки (CCNET), все файлы веб-сайта ASP.NET копируются в виртуальный каталог (% output_dir%), поэтому лица, не являющиеся разработчиками, могут увидеть / протестировать последнюю версию веб-сайта. В конце сборки выполняется следующий файл.
rmdir /s /q "%output_dir%"
mkdir "%output_dir%"
xcopy "%source_dir%*" "%output_dir%" /e /c /i /q /-y
Проблема в том, что я считаю копирование медленным, и мне было интересно, есть ли в Windows 2008 какие-либо команды копирования, которые быстрее, чем xcopy? Источник и место назначения находятся на одном диске. Ниже приведены аргументы, которые мы используем при копировании.
/e = copies directories and sub directories including empty ones.
/c = continues copying even if there are errors
/i = if destination does not exist destination is directory
/q = don't display filenames
/-y = confirm overwrite
Только с точки зрения производительности, xcopy или Робокопия даст вам аналогичные результаты. Я провел несколько тестов на 64-битной Windows Vista с пакетом обновления 2 (SP2), чтобы провести некоторые сравнения. Все копии были выполнены между внутренним диском Sata II со скоростью вращения 7200 об / мин и внешним диском USB 2.0 или на самом внутреннем диске, где указано. Никакой специальной настройки не производилось (примите решение, если это делает недействительным / проверяет тест), только для ввода команды в командный файл для выполнения. PowerShell использовался для захвата времени начала и остановки. После пары проходов вот средние значения инструментов, которыми я играл:
Файл: 732 909 568 байт (698 МБ), 1 файл ISO скопирован в другой каталог на том же внутреннем диске.
copy 6 secs (ex. copy G:\folder1\* G:\folder2\)
xcopy 6 secs (ex. xcopy G:\folder1 G:\folder2 /I /E /Y /R)
robocopy 6 secs (ex. robocopy G:\folder1\ G:\folder2 /E /NP)
teracopy 28 secs (ex. TeraCopy.exe Copy G:\folder1\ G:\folder2\)
fastcopy 19 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=G:\folder2)
Файл: 732 909 568 байт (698 МБ), 1 файл ISO скопирован на внешний USB-диск.
copy 36 secs (ex. copy G:\folder1\* I:\folder2\)
xcopy 35 secs (ex. xcopy G:\folder1 I:\folder2 /I /E /Y /R)
robocopy 36 secs (ex. robocopy G:\folder1\ I:\folder2 /E /NP)
teracopy 36 secs (ex. TeraCopy.exe Copy G:\folder1\ I:\folder2\)
fastcopy 38 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=I:\folder2)
Файлы: 45 039 616 байт (42,9 МБ) 5 случайных файлов, скопированных на внешний USB-диск
copy 6 secs (ex. copy G:\folder1\* I:\folder2\)
xcopy 5 secs (ex. xcopy G:\folder1 I:\folder2 /I /E /Y /R)
robocopy 6 secs (ex. robocopy G:\folder1\ I:\folder2 /E /NP)
teracopy 12 secs (ex. TeraCopy.exe Copy G:\folder1\ I:\folder2\)
fastcopy 6 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=I:\folder2)
Файлы / каталоги: 1 087 180 800 байт (1,01 ГБ), 27 файлов / 8 каталогов, скопированных на внешний USB-диск.
copy *Not included in test
xcopy 57 secs (ex. xcopy G:\folder1 I:\folder2 /I /E /Y /R)
robocopy 58 secs (ex. robocopy G:\folder1\ I:\folder2 /E /NP)
teracopy 56 secs (ex. TeraCopy.exe Copy G:\folder1\ I:\folder2\)
fastcopy 60 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=I:\folder2)
Это ни в коем случае не исчерпывающий тест, но просто бросив быстрый сценарий реального мира в некоторые из наиболее популярных инструментов в этом жанре, вы увидите, что вы довольно безопасно придерживаетесь xcopy или Robocopy (только с точки зрения производительности). Также вариант Robocopy /NP
(Нет прогресса) сэкономит вам 0 времени. Однако это не означает, что вы не можете получить выгоду от использования чего-то другого, кроме xcopy. Robocopy - отличный пример (от Википедия):
Robocopy отличается возможностями, выходящими за рамки встроенной копии Windows и
команды xcopy, включая следующие:
Обычно я использую:
robocopy source dest /E /MIR
или какой-то другой вариант параметров - возможно /NFL /NDL /NS /NC /NP
чтобы соответствовать "тихому"
Фактически, исключив Сеть, вы действительно ограничили свое тестирование. Возможно, вы захотите рассмотреть возможность использования общего сетевого ресурса, что является большой частью работы администратора.
Кроме того, вы должны использовать FTP и вообще пропустить CIFS. Eseutil.exe - еще одна утилита, которую вы можете добавить туда. (Утилита Exchange, которую можно использовать в другом месте, вместе с четырьмя зависимыми dll.)
Тогда я бы хотел увидеть ваши результаты.
Я использую XCopy для той же цели. Я также добавил к этому серверу еще одну сетевую карту и поместил ее в отдельную подсеть. Затем установил прямое соединение с сервером, с которого я передаю файлы. Таким образом, 2 машины перемещают скопированные данные через одну подсеть, и пользователи по-прежнему могут получить доступ через второй ник, который подключен непосредственно к локальной сети.
Вы говорите, что источник и место назначения находятся на одном диске, но находятся ли они на сервере сборки?
Если сервер сборки является местом расположения источника и назначения, подумайте о перемещении одной или другой папки на другой диск, возможно, на другой контроллер.
Если сервер сборки не является местом расположения источника и назначения (отбросы сборки не всегда находятся на сервере, на котором они построены), рассмотрите возможность создания задачи на сервере, где находятся исходная и конечная папки. Тогда просто начните эту задачу удаленно.
За эти годы мне пришлось сделать несколько копий. У нас есть одна машина с Windows Server 2008 R2 с одним каталогом с более чем 12 мегабайтами изображений внутри (примерно 400 ГБ).
Очевидно, я бы предпочел не такой большой каталог, НО:
В любом случае, я просто подумал, что поделюсь с ними своим опытом из-за необычной природы моего действительно большого каталога.