Какой самый эффективный способ разобрать сообщения протокола FIX в. NET?

Я наткнулся на этот очень похожий вопрос , но этот вопрос помечен как QuickFIX (который не имеет отношения к моему вопросу), и большинство ответов связаны с QuickFIX.

Мой вопрос шире. Я ищу наиболее эффективный способ синтаксического анализа сообщения FIX Protocol с использованием C # . В качестве фона сообщение FIX состоит из серии пар тег / значение, разделенных символом ASCII (0x01). Количество полей в сообщении может меняться.

Пример сообщения может выглядеть следующим образом:

8=FIX.4.29=17535=D49=BUY156=SELL134=248250=frg
52=20100702-11:12:4211=BS0100035492400021=3100=J55=ILA SJ
48=YY7722=5167=CS207=J54=160=20100702-11:12:42
38=50040=115=ZAR59=010=230

Для каждого поля, тег (целое число) и значение (для наших целей строка) разделяются знаком '='. (Точная семантика каждого тега определяется в протоколе, но это не имеет отношения к этому вопросу.)

Часто бывает так, что при выполнении базового синтаксического анализа вас интересуют только несколько конкретных тегов из Заголовок FIX, а не произвольный доступ ко всем возможным полям. Я рассмотрел следующие стратегии:

  • Использование String.Split , перебор каждого элемента и размещение тега для отображения индекса в Hashtable - обеспечивает полный произвольный доступ ко всем полям, если это необходимо в какой-то момент

  • (Небольшая оптимизация) Использование String.Split , сканирование массива на наличие интересующих тегов и размещение тега для отображения индекса в другой контейнер (не обязательно в Hashtable, поскольку это может быть довольно небольшое количество элементов, и количество элементов известно до анализа)

  • Сканирование сообщения поле за полем, используя String.IndexOf и сохраняя смещение и длину интересующих полей в соответствующей структуре

Что касается первых двух - хотя мои измерения показывают String.Split довольно быстро, согласно документации метод выделяет новую строку для каждого элемента результирующего массива, который может генерировать много мусора, если вы анализируете много сообщений. Может ли кто-нибудь найти лучший способ решить эту проблему в .NET?

РЕДАКТИРОВАТЬ:

Три важных элемента информации, которые я упустил:

  1. Теги не обязательно уникальны в сообщениях FIX, т. Е. Повторяющиеся теги могут встречаться при определенных обстоятельствах.

  2. Некоторые типы полей FIX могут содержать «встроенные » в данные - эти теги относятся к типу «данные» - в словаре перечислены номера тегов этого типа.

  3. Конечным требованием является возможность редактировать сообщение (в частности, заменять значения).

8
задан Community 23 May 2017 в 12:17
поделиться