2015-03-30 4 views
2

Прошу прочитать мою проблему до конца. Кто-то может найти дубликат.C# - Самый быстрый способ скопировать файлы изображений в компьютер lan

У меня есть приложение для Windows (приложение для клиентов) машина & Веб-приложение (приложение сервера) на другом компьютере в той же сети. Клиентское приложение захватывает экран 5fps и хранит в локальной папке, которая является общей. У меня есть служба Windows, которая работает на сервере. Он перемещает образы клиентов в каталог сервера из общей папки клиента. Я использую File.Move для перемещения файлов вместе с классом FastDirectoryEnumerator. Эти перемещенные файлы используются для создания видео позже, а также для показа прямой трансляции.

Вопросы:

есть ли другой (/ Лучший быстрый) вариант, чтобы переместить эти файлы в режиме реального времени (передача, как только он будет создан на стороне клиента)? Я также заинтересован в передаче файлов в режиме реального времени без общей папки.

Update:

Мои основные проблемы.

  1. File Transfer должен быть быстрее, чтобы потоковым через мой сервер приложений (ASP.NET)

  2. Клиент должен сохранить его, если сервер/соединение не доступно & передачи, как только он приходит в Интернете.

+4

Вы можете создать TCP-клиент и сервер для отправки данных изображения непосредственно на ваш удаленный сервер. Таким образом, время, чтобы записать скриншоты на ваш собственный диск, будет устранено. – cansik

+0

Возможно, вы захотите рассмотреть возможность сжатия файлов для ускорения передачи. [Здесь] (http://stackoverflow.com/questions/26224095/how-to-find-the-difference-between-two-images/26225153?s=1|1.5442#26225153) - метод различий, который может помочь, если проблема с передачей. – TaW

+1

Я пишу файлы локально, потому что хочу сохранить файлы локально, если сервер недоступен для передачи. Тогда мне также нужно будет следить за доступностью подключения к серверу и начать передачу файлов в следующий момент, когда сервер подключается к сети. Есть ли у вас оптимизированный способ проверки доступности? Я не могу сжать изображения, поскольку хочу показать как потоковое видео в качестве сервера как еще одну функцию моего приложения. –

ответ

1

Я не знаю, почему у вас есть сервер, контролирующий долю клиента, безусловно, этот мониторинг или, как вы говорите, процедура DirectoryEnumerator требует времени.

Поскольку клиент знает, когда изображение было захвачено, почему вы не отправляете эту информацию на сервер сразу с клиента? Таким образом, вам не нужно контролировать клиентов с сервера, вам не нужно находить/перечислять папки, вы просто переносите данные с клиента на сервер, как только он доступен с определенным вызовом WCF/Web Service, который принимает поток байтов в качестве входных данных.

0

Если у вас нет контроля над клиентским приложением, создающим файлы изображений, у вас может быть FileSystemWatcher, работающий на клиентской машине. Добавьте обработчик событий, который будет вызываться всякий раз, когда событие Created возникает из-за файла, создаваемого в файловой системе.

См https://stackoverflow.com/a/15018082/1730317

0

вещей, чтобы рассмотреть в получении максимальной производительности данного вида деятельности.

  • для «реального времени» уведомлений вы можете посмотреть на FileSystemWatcher класса. Подробную информацию см. В документации. Слово предупреждения об этом, хотя, когда операционная система занята, она упустит некоторые из этих событий, и вам не будет сообщено о новом файле. Это хорошая идея, чтобы запрограммировать цикл развертки, чтобы убедиться, что у вас есть все файлы, в прошлом я был пойман с этим.

  • Возможно, вам захочется проверить конфигурацию вашего оборудования, такую ​​как сетевая латентность между ПК и сервером, а также скорость на диске как на ПК, так и на сервере.Низкий удельный SSD, вероятно, будет иметь большую производительность в таких операциях над вращающимися дисками.

Смежные вопросы