Я должен использовать XML или Двоичный файл для отправки данных от сервера до клиента?

У меня есть два отдельных приложения - одно клиент (в C#), один сервер (в C++). Они должны обмениваться данными в форме "структур" и ~ приблизительно 1 МБ данных, которые минута отправляется от сервера до клиента.

Что лучше для использования - XML или мой собственный Двоичный формат?

С XML:

  • Перевод XML к структуре с помощью синтаксического анализатора был бы медленным, я верю? ("хороший", но: синтаксический анализатор загрузки, загрузка XML, синтаксический анализ)
  • Другая опция анализирует XML с regex (плохо!)

С двоичным файлом:

  • компактные размеры данных
  • никакая потребность в метаинформации как теги;
  • но структуры не могут быть изменены легко для размещения новых структур / новых участников в структурах в будущем;
  • никакое преобразование из текста (XML) к двоичному файлу (структура), необходимая так, не быстрее, чтобы получить и "собраться" в структуру),

Какие-либо указатели? Разве я не должен рассматривать двоичный файл вообще?? Немного перепутанный, о какой подход взять.

5
задан Liao 2 February 2010 в 09:56
поделиться

9 ответов

В этом случае нет необходимости вызывать release . Поскольку используется удобный конструктор, возвращаемый объект является автоматически освобожденным объектом.
При использовании формы размещения/ввода пользователь несет ответственность за деблокирование объекта.

-121--4746354-

Как вы заявили, XML (немного) медленнее, но гораздо более гибко и надежно. Я бы пошел с XML, пока не будет доказана проблема с производительностью.

В качестве альтернативы также следует использовать ProtoBuff .

После обновления любые требования к кросс-языковым, кросс-платформенным и кросс-версиям сильно отличаются от двоичного форматирования.

-121--4690759-

1MB данных в минуту довольно мала, если у вас есть разумное сетевое соединение.

Существуют другие варианты между двоичным и XML - другие форматы сериализации текста, читаемые человеком, такие как JSON.

Когда дело доходит до двоичного, у вас нет проблем с управлением версиями - технологии, такие как протокольные буферы (я предвзят: я работаю на Google и я портировал PB на C # ) явно разработаны с обратной и прямой совместимостью в виду. Существуют и другие двоичные форматы, например Thrift .

Если вы беспокоитесь о производительности, вам следует измерить ее. Я почти уверен, что мой телефон может проанализировать 1MB XML достаточно быстро, чтобы это не было проблемой в данном случае... в основном проработать, что вас больше всего волнует, с точки зрения:

  • Простота кода
  • Совместимость
  • Производительность с точки зрения CPU
  • Сетевой трафик
  • Совместимость «назад/вперед»
  • Удобство чтения данных в проводном формате

Это все балансирующее действие - но именно вы должны решить, какой вес придать каждому из этих факторов.

7
ответ дан 18 December 2019 в 14:46
поделиться

Если у вас есть .NET приложения с обоих концов, используйте Windows Communication Foundation . Это позволит вам отложить принятие решения до момента установки, поскольку поддерживает как двоичную, так и XML сериализацию.

2
ответ дан 18 December 2019 в 14:46
поделиться

Хорошая точка для XML была бы совместимостью. У вас есть другие клиенты, которые также получают доступ к вашему серверу?

Прежде чем использовать свой собственный двоичный формат или REGEX на XML ... Вы считаете пространство имен сериализации в .NET? Существуют двоичные формы, мыльные формы и существует также XMLSerization.

1
ответ дан 18 December 2019 в 14:46
поделиться

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

Также даже минимальное (быстрое) сжатие XML может драматическое снизить нагрузку на проволоку.

1
ответ дан 18 December 2019 в 14:46
поделиться

text/xml

  • Human readable
  • Easier to debug
  • Bandwidth can be saved by compressing
  • Tags document the data they contain

binary

  • Compact
  • Easy to parse (если используются поля фиксированного размера, просто наложите структуру)
  • Трудно отлаживать (шестнадцатиричные редакторы - это заноза)
  • Нужен отдельный документ, чтобы понять, что такое данные.

Обе формы расширяемы и могут быть обновлены до более новых версий при условии, что вы вставляете поле типа и версии в начале дейтаграммы.

0
ответ дан 18 December 2019 в 14:46
поделиться

Можно выполнить команду TF.exe status, чтобы получить список файлов, извлеченных из конкретного проекта. также можно выполнять поиск по имени пользователя..

здесь приведена ссылка для получения дополнительной информации.

http://patelshailesh.com/index.php/how-to-get-the-list-of-currently-checked-out-files-in-tfs

Надеюсь, что это поможет

-121--4246258-

Получите средства управления питанием TFS - они интегрируются в представление командного обозревателя. Вы получите список людей в команде. Можно щелкнуть правой кнопкой мыши участников коллектива и просмотреть их текущие наборы изменений.

Вы можете ознакомиться с TFS Power Tools на сайте Майкрософт здесь - в октябрьском выпуске 2008 есть функциональность Team Членов.

-121--4246255-

Также можно использовать Буферы протокола Google , которые являются компактным двоичным представлением для структурированных данных.

0
ответ дан 18 December 2019 в 14:46
поделиться

Существует много устаревших примеров удаления с помощью поля идентификатора. Приведенный ниже код будет работать с Lucene.NET 2.4.

Нет необходимости открывать IndexReader, если вы уже используете IndexWriter или для доступа к IndexSearcher.Reader. Вы можете использовать IndexWriter. DeleteDocuments (Термин), но хитрая часть удостоверяется, что вы сохранили свое идентификационное поле правильно во-первых. При сохранении документа убедитесь, что Field.Index.NOT_ANALYZED используется в качестве настройки индекса в поле идентификатора. Это индексирует поле без токенизации, что очень важно, и ни одно из других значений Field.Index не будет работать при использовании таким образом:

IndexWriter writer = new IndexWriter("\MyIndexFolder", new StandardAnalyzer());
var doc = new Document();
var idField = new Field("id", "MyItemId", Field.Store.YES, Field.Index.NOT_ANALYZED);
doc.Add(idField);
writer.AddDocument(doc);
writer.Commit();

Теперь вы можете легко удалить или обновить документ с помощью того же самого устройства записи:

Term idTerm = new Term("id", "MyItemId");
writer.DeleteDocuments(idTerm);
writer.Commit();
-121--2878694-

После работы над несколькими проектами миграции, первое, что нужно сделать, это понять, каковы ваши цели миграции. Они могут значительно отличаться от организации к организации, но помогают установить приоритеты во время фактического проекта миграции. Это также помогает лучше оценивать преимущества с учетом рисков и затрат.

Как и другие, важно понимать, что процесс миграции автоматически не улучшит качество кода. Так что если ваша главная цель состоит в рефакторе (и ничего другого), то вы должны знать, что может пройти недели или месяцы, прежде чем у вас будет функционально эквивалентный код (в зависимости от размера кода и сложности миграции).

При этом, .NET действительно имеет некоторые очень хорошие инструменты для рефакторинга и анализа кода, в дополнение к номерам люкс модульных тестов. Автоматические средства преобразования, такие как Visual Basic Upgrade Companion компании ArtinSoft, можно настроить для применения стандартов кодирования или значительного улучшения кода во время преобразования. Это сочетание с другими инструментами модификации кода, такими как ReSharper , значительно ускорит переход на .NET.

По моему опыту, проект миграции - это управляемый проект, если вы знаете, что в нем задействованы усилия вручную. Коммерческие инструменты имеют режимы оценки, которые могут помочь количественно оценить усилия по миграции и дать вам представление о том, с какими проблемами вы можете столкнуться при миграции.

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

В основном все новые настраиваемые элементы управления должны быть записаны в .NET и представлены в виде элементов ActiveX для использования приложением VB6. Аналогично, новые функции DLL должны быть помещены в сборки .NET, которые могут использоваться через COM. Таким образом, когда наступит время миграции, вам не придется беспокоиться об этих элементах управления или библиотеках.

-121--1555327-

вы не сказали, если они находятся на одной машине или нет. Я предполагаю, что нет.

В этом случае, то есть еще один минус бинарного. Вы не можете просто сбросить структуры на провод, у вас может быть эндианнесса и sizeof проблемы.

XML очень многословен,YAML или JSON намного меньше

0
ответ дан 18 December 2019 в 14:46
поделиться

Не забывайте, что большинство людей воспринимают XML как XML, сериализованный как текст. Вместо этого он может быть сериализован в двоичный. Это то, что делает netTcpBinding и другие подобные привязки в WCF. Информационный набор XML выводится как двоичный, а не как текст. Это все еще XML, только в двоичном формате.

0
ответ дан 18 December 2019 в 14:46
поделиться

Как вы сказали, XML (немного) медленнее, но гораздо более гибкий и надежный. Я бы выбрал XML, пока не возникнет доказанная проблема с производительностью.

Вы также должны взглянуть на ProtoBuff в качестве альтернативы.

И после вашего обновления любые межъязыковые, кроссплатформенные и кросс-версии требования строго указывают на отказ от двоичного форматирования.

2
ответ дан 18 December 2019 в 14:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: