【问题标题】:Protobuf DeserialisationProtobuf 反序列化
【发布时间】:2015-09-06 10:46:22
【问题描述】:

我们已经使用 protobuf 好几年了,它非常适合我们的工作。

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

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

场景:

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

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

错误:

上下文:1 错误生成小部件。分析任务全局 ID: d549f367-f42f-45fa-b230-f2839a6fefe6 错误:类型异常 'ProtoBuf.ProtoException' 被抛出。堆栈:在 ProtoBuf.ProtoReader.StartSubItem(ProtoReader reader) in c:\Dev\protobuf-net\protobuf-net\ProtoReader.cs:第 599 行 ProtoBuf.ProtoReader.ReadTypedObject(对象值,Int32 键, ProtoReader 阅读器,Type 类型)在 c:\Dev\protobuf-net\protobuf-net\ProtoReader.cs:line 531 at proto_2(对象,ProtoReader)在 ProtoBuf.Meta.TypeModel.Deserialize(流源,对象值,类型 类型,SerializationContext 上下文)在 c:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:第 506 行 ProtoBuf.Serializer.Deserialize[T](Stream source) in c:\Dev\protobuf-net\protobuf-net\Serializer.cs:第 69 行

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

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

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

【问题讨论】:

  • 我们使用的是版本 2 的 protobuf
  • 我们反序列化的类型有 113000 字节。看起来对象的大小和多线程的使用导致了这个问题。是否有任何 protobuf 提示,我应该使用?
  • 如果您将堆栈跟踪格式化为更易于阅读,这将更容易理解您的问题。

标签: .net protobuf-net


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    相关资源
    最近更新 更多