Теперь я использую Socket SendFile
API, чтобы отправить файл или его часть в любые сети. Могу ли я сделать этот процесс быстрее по сравнению с lan
? Я знаю о таких программах, как TeraCopy, что значительно ускоряет процесс копирования файлов по локальной сети (некоторые говорят об ускорении 2 раза) по сравнению с обработчиком Windows Explorer, который использует API CopyFile
(я думаю). Я не знаю, как они это делают. Не могли бы вы мне посоветовать?Каков самый быстрый способ передачи данных по локальной сети?
ответ
Одним из способов ускорения копирования файлов было бы сделать это через UDP вместо TCP. Тогда проблема заключается в том, чтобы выполнить проверку ошибок (поскольку UDP не гарантирует, что пакет прибывает неповрежденным или в порядке).
Проводник Windows Explorer медленный, потому что он открывает каждый файл отдельно, копирует его и закрывает (по крайней мере, насколько мне известно).
Ваш вопрос действительно не дает никакого кода, поэтому немного сложно ответить «правильно».
UDP - это ужасный способ скопировать файлы, накладные расходы намного превосходят любые предполагаемые сбережения в квитировании и т. Д. Файлы представляют собой последовательные потоки двоичных данных, именно то, что предназначено для TCP. – Ashigore
@Ashigore: для записи файлов не имеет значения, к какому заказу поступают пакеты, чтобы он мог сэкономить на очередности на принимающей стороне, если пакеты выходят из строя. Я согласен, что расходы, вероятно, перевешивают выгоды. – Thomas
Вот что я нашел http://en.wikipedia.org/wiki/UDP-based_Data_Transfer_Protocol. Он основан на UDP, как и некоторые другие протоколы, оптимизированные для больших передач файлов в высокоскоростных глобальных сетях, которые больше влияют на это, чем на TCP. Но плохой идеал написать такой протокол на udp самостоятельно в каком-то общем приложении ... слишком много работы. –
Вы можете сжимать данные «на лету», а затем распаковывать их после отправки по сети.
GZipStream подходит для такого рода вещей, а также приведены основные примеры сжатия/распаковки.
Сжатие, конечно же, заставит вас получить удар производительности процессора, но вам придется передавать меньше данных, что позволяет сократить время передачи. Самое приятное в этой библиотеке, что сжатие работает с потоками. Таким образом, вы можете транслировать по сети, не дожидаясь сжатия всего файла.
Это не сработает, если у вас не было другого демона, работающего в пункте назначения, для декомпрессии потока. В противном случае вам придется распаковать поток перед вызовом API 'CopyFile'. Или в худшем случае, записывая сжатый файл в пункт назначения, а затем читать и записывать его для его распаковки. – Xenolightning
Вы правы, но вопрос не очень точный о том, как должна произойти передача. Поэтому я сделал предположения. – Andreas
- 1. Каков самый быстрый способ поиска в сети?
- 2. Каков самый быстрый способ передачи данных между C++ и Java
- 3. Каков самый быстрый способ управления Git по сети?
- 4. быстрый способ обнаружить узлы в локальной сети
- 5. Самый быстрый способ передачи данных между приложением
- 6. Самый быстрый способ передачи данных между потоками
- 7. Каков самый быстрый способ перефразировать?
- 8. Самый быстрый способ подключения к локальной сети адресов
- 9. Каков самый быстрый способ предварительной обработки данных?
- 10. Каков наилучший способ передачи данных по сети с подтверждением. .Net
- 11. Каков самый быстрый способ потоковой передачи рабочего стола?
- 12. Быстрый и надежный многоплатформенный способ отправки файла по локальной сети
- 13. Каков самый быстрый способ перезаписи файла?
- 14. Самый быстрый способ хранения текстовых фрагментов, полученных по сети
- 15. Лучший способ передачи больших файлов по локальной сети на windows
- 16. Каков самый быстрый способ чтения из InputStream?
- 17. Каков самый быстрый способ умножения матрицы?
- 18. Каков самый быстрый способ доставки двоичных данных в браузер?
- 19. WCF [Интернет-сценарий]. Самый быстрый способ передачи \ serialize (de) данных
- 20. Каков самый быстрый способ построения DataFrame по частям?
- 21. Каков самый быстрый способ сгруппировать мои записи?
- 22. Каков наилучший способ передачи данных между движком CEP и генератором данных потока в локальной сети?
- 23. IP-адрес многоадресной передачи по локальной сети
- 24. Каков самый быстрый способ очистки таблицы SQL?
- 25. Каков самый быстрый способ распараллеливать код?
- 26. Каков самый быстрый способ подвести список Interger
- 27. WPF-приложение + PHP, самый быстрый способ передачи данных
- 28. Самый быстрый способ передачи большого количества данных между двумя приложениями
- 29. Самый быстрый способ передачи небольших пакетов данных на одном компьютере
- 30. Каков самый быстрый способ запроса базы данных с помощью LINQ?
Вы обнаружите, что TeraCopy, вероятно, все еще использует библиотеку Win32 'FileCopy'. Нет простого способа улучшить работу сети «точка-точка», и я бы доверял разработчикам Windows/Samba оптимизировать свой код низкого уровня, чтобы сделать это хорошо. Лучшее, на что можно надеяться, это оптимизация очереди файлов. – Xenolightning
@Xenolightning после некоторого искажения a видеть, что есть много более быстрого файлового trasfer, а затем стандартный TCP для разных условий: для большого количества небольших файлов - во-первых, для больших файлов по высокоскоростной сети с высокой задержкой - второй, для больших файлов выигрывать высокоскоростные сети с низким уровнем латентности - третье ... все, что нужно ... –
У вас есть два вопроса: «Могу ли я сделать этот процесс быстрее по LAN?» Очевидный ответ - «Да». Затем вы спрашиваете, как работает TeraCopy, что я использовал в качестве контекста для вашего «реального» вопроса. Возможно, вы пересмотрите свой вопрос на что-то вроде «Я хочу передавать файлы по сети, как это сделать, чтобы максимально увеличить скорость передачи?» – Xenolightning