|
Копирование файлов
|
|||
---|---|---|---|
#18+
Подскажите... В java - скрипте реализовано копирование файлов на сетевой ресурс ... is = new FileInputStream(source); os = new FileOutputStream(dest); byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) > 0) { os.write(buffer, 0, length); } Копирование длится в 3 раза дольше по сравнению с копированием в проводнике (FAR) файлы ~ 50гб C параметром buffer игрался - существенных результатов нет Чем объяснить? ПС: Не силен в предмете ...если не корректно задал прошу сильно не бить) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 08:15 |
|
Копирование файлов
|
|||
---|---|---|---|
#18+
dbxp Чем объяснить? Что ты хотел от жабки? Чтобы она быстро работала? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 08:26 |
|
Копирование файлов
|
|||
---|---|---|---|
#18+
crutchmaster, хотя бы так же ..то есть это очевидно? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 08:48 |
|
Копирование файлов
|
|||
---|---|---|---|
#18+
dbxp crutchmaster, хотя бы так же Почему "хотя бы"? Типа в идеале должно быть быстрее? dbxp ..то есть это очевидно? Ну конечно, это же ява. Там есть какой-то оверхед на всё. Это только в синтетических тестах она обгоняет си в 20 раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 09:17 |
|
Копирование файлов
|
|||
---|---|---|---|
#18+
dbxp, java.nio.file.Files#copy тоже медленно? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 10:26 |
|
Копирование файлов
|
|||
---|---|---|---|
#18+
dbxp Копирование длится в 3 раза дольше ... C параметром buffer игрался - существенных результатов нет - используйте BufferedInputStream и BufferedOutputStream, но как уже отметили выше, возможно имеет смысл использовать другие способы копирования ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 10:45 |
|
Копирование файлов
|
|||
---|---|---|---|
#18+
Андрей Панфилов dbxp, java.nio.file.Files#copy тоже медленно? +1 Я чет как то дебажил Files.newInputStream(), и там еще и "правильный" буфер (но это частный случай возможно зависит от ОС и файловой системы) внутри в jvm был буффер его размер совпадал и не случайно с размером страницы файловой системы. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 12:00 |
|
Копирование файлов
|
|||
---|---|---|---|
#18+
dbxp Подскажите... В java - скрипте реализовано копирование файлов на сетевой ресурс ... is = new FileInputStream(source); os = new FileOutputStream(dest); byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) > 0) { os.write(buffer, 0, length); } Копирование длится в 3 раза дольше по сравнению с копированием в проводнике (FAR) файлы ~ 50гб C параметром buffer игрался - существенных результатов нет Чем объяснить? ПС: Не силен в предмете ...если не корректно задал прошу сильно не бить) Оптимизация копирования файлов - это отдельный челендж. Джефри РИхтер в своей книге по Windows посвятил этому несколько глав. В простейшем коде наподобие исходников apache commons io Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
простота принесена в жертву производительности. В этом однопоточном приложении примерно 50% времени мы ожидаем чтения блока и 50% времени ожидаем его записи. Чтоб ускорить это нужны другие подходы. Нужна разделяемая память для процесса (потока в Java) читателя и писателя одновременно. Или можно почитать про библиотеку nio. Возможно там эта задача уже решена как-то по другому. Но эта оптимизация даст преимущество когда у тебя не ноутбук а хорошая рабочая станция с 2 независимыми SATA-3 дисками или комбинация SATA/SSD. Тест с Far менеджером может быть фейком при многократных повторах. Здесь надо смотреть настройки FAR. рекомендую тебе повторить эксперимент с нуля сразу после физического ребута операционки. Резульат может быть другой. Вообще все современные файловые системы и хранилища сопротивляются бенчмаркам и хотят тебя обмануть. Операционка пытается кешировать чтение и запись. Еще хуже - экзотические файловые системы. Я недавно сам обманулся копируя на флешку в формате f2fs. Она скопировала файлы мгновенно. Но еще минут 15 в фоновом режиме на самом деле дописывала данные. И выдергивать ее было нельзя. Вобщем задай себе сам вопрос что тебе надо? Просто поставить джоб на копирование. Или получить самый последний байт физически лежащим в destination. И между этими двумя вопросами еще - такой ползунок который можно подвигать влево и вправо. Тоесть быстрее и ненадёжнее. Или медленнее и надежнее. Или можно вообще не копировать. Если ты - счастливый обладатель современного Linux, то тебе доступны операции COW (copy-on-write) которые просто делают интеллектуальный софт-линк на тело файла. Это работает только в рамках одной локальной файловой системы. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2020, 17:19 |
|
|
start [/forum/topic.php?fid=59&msg=39989214&tid=2120715]: |
0ms |
get settings: |
19ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
231ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 356ms |
0 / 0 |