TL; DR: мне нужно идентифицировать byte [] как принадлежащий сообщению protobuf или нет. Есть ли эффективный способ сделать это без блока try / catch?
Я добавляю protobuf в существующий набор сообщений для C# приложения для мониторинга сообщений. Мне нужно анализировать сообщения с частотой ~ 100 Гц, а в моем наборе сообщений около 40 сообщений. В настоящее время я пытаюсь разобрать сообщение protobuf, используя код:
public bool IsProtobuf(byte[] Data){
try
{
Any anyMsg = Any.Parser.ParseFrom(Data);
bool isProtobuf = anyMsg.Is(protobuf_message.Descriptor);
if(isProtobuf)
{
protobuf_message parsed = protobuf_message.Parser.ParseFrom(Data);
return true;
}
}
catch (InvalidProtocolBufferException)
{
return false;
}
}
Однако блоки try / catch ДЕЙСТВИТЕЛЬНО ухудшают мою производительность. I go от синтаксического анализа сообщений ~ 2000 Гц без сообщений protobuf до синтаксического анализа сообщений ~ 25 Гц со всеми моими сообщениями protobuf. * 1006 *
Есть ли более быстрый способ проверить, принадлежит ли буфер byte [] сообщению protobuf или нет?