Protobuf反序列化

Protobuf Deserialisation

我们使用 protobuf 已经有几年了,它非常适合我们所做的事情。

但是,最近我们遇到了一些反序列化问题。

以前反序列化是串行完成的,现在为了加快这个过程,我们使用了系统可以提供的所有内核。

场景:

  1. 我们正在生成报告,其中包括 100 张图片。
  2. 每张图片都是一个小部件,每个小部件都有自己的数据源。
  3. 我们有不止一个小部件访问相同的数据(存储在 protobuf 中)。
  4. 附件是一张截图,其中突出显示了 2 个小部件开始反序列化。
  5. 其中第一个成功反序列化。
  6. 第二个反序列化失败,并附有以下错误消息

注意:第一次和第二次反序列化相隔几毫秒。

错误:

Context: 1 errors generating widgets. AnalysisTaskGlobalID: d549f367-f42f-45fa-b230-f2839a6fefe6 Error: Exception of type 'ProtoBuf.ProtoException' was thrown. Stack: at ProtoBuf.ProtoReader.StartSubItem(ProtoReader reader) in c:\Dev\protobuf-net\protobuf-net\ProtoReader.cs:line 599 at ProtoBuf.ProtoReader.ReadTypedObject(Object value, Int32 key, ProtoReader reader, Type type) in c:\Dev\protobuf-net\protobuf-net\ProtoReader.cs:line 531 at proto_2(Object , ProtoReader ) at ProtoBuf.Meta.TypeModel.Deserialize(Stream source, Object value, Type type, SerializationContext context) in c:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:line 506 at ProtoBuf.Serializer.Deserialize[T](Stream source) in c:\Dev\protobuf-net\protobuf-net\Serializer.cs:line 69

我们认为这不是多线程问题!,因为我们尝试同步反序列化过程。

但是,在反序列化之前添加 1000 毫秒的睡眠时,大部分时间都有效!

对此有任何想法,请告诉我。

这最终不是 protobuf 错误。我们的应用程序没有充分同步。