В настоящее время я подписываюсь на многоадресный UDP.Он передает несколько сообщений, каждое около 80 байтов, в одном максимальном 1000-байтовом пакете.По мере поступления пакетов я разбираю их на объекты, а затем сохраняю в словаре.
Каждый пакет, который я получаю, имеет порядковый номер, чтобы я знал, отбросил ли он какие-либо пакеты.
После получения примерно 10 тыс. Пакетов я начинаю отбрасывать пакеты тут и там.
securityDefinition xyz = new securityDefinition(p1,p2,p3,p4,p5...etc);
if (!secDefs.ContainsKey(securityID))
{
secDefs.Add(securityID, xyz); //THIS WILL CAUSE DROPS EVENTUALLY
secDefs.Add(securityID, null); //THIS WORKS JUST FINE
}
else
{
//A repeat definition is received and assuming all
//sequence numbers in the packet line up sequentially, I know i am done
//However if there is a drop somewhere (gap in sequence number),
//I know I am missing something
}
securityDefinition - это класс, содержащий примерно 15 дюймов, 10 десятичных знаков и 5 строк (<10 символов каждая). </p>
Существует ли более быстрый способ хранения этих объектов в режиме реального времени, который может поддерживатьс быстрой подачей UDP?Я попытался сделать securityDefinition структурой, я попытался сохранить данные в таблице данных, я попытался добавить secDef в список и очередь.Та же проблема со всеми.
Кажется, единственным узким местом является размещение объектов в словаре.Создание объекта и проверка словаря, чтобы увидеть, существует ли он уже, выглядит неплохо.
РЕДАКТИРОВАТЬ: Чтобы прояснить несколько вещей - определения безопасности приходят с сервера в цикле.Есть приблизительно 1 000 000 определений.Как только они все отправлены, они отправляются снова, снова и снова.Когда моя программа запускается, мне нужно инициализировать все определения.Как только я получу повтор, я знаю, что все готово и могу закрыть эту связь.Однако, если я получаю пакет с порядковым номером 1, а следующий - с порядковым номером 3, я знаю, что отбросил пакет 2 и не могу его восстановить.