【问题标题】:Serialization of a tuple of memory streams (jagged arrays) using Protobuf.net使用 Protobuf.net 序列化内存流元组(锯齿状数组)
【发布时间】:2011-10-22 13:31:52
【问题描述】:

是否可以序列化由二进制编写器使用 Protobuf.net 创建的内存流元组?如果我尝试这样做,Protobuf 会说它无法序列化流。

我所追求的是序列化一个锯齿状数组的元组。我不想将它们转换为一维数组,因为我认为没有必要。所以我想我会自己将锯齿状数组序列化到内存流中,但我希望 Protobuf.net 为我序列化元组。我需要尽快进行整体序列化/反序列化。

编辑:

我的总体目标是无论如何都尽可能快地通过 WCF 发送以下锯齿状数组元组。 from jagged array to jagged array 的总时间很重要。

// F# interactive code
#time "on"
#r @"d:\Protobuf\protobuf-net.dll"

let getJaggedArray () =
  let size = 100
  let rnd = System.Random 1
  Array.init size (fun i ->
    Array.init size (fun j ->
      Array.init size (fun k ->
        rnd.NextDouble() )))

let wcfData = (getJaggedArray (), getJaggedArray ()), getJaggedArray ()

let file = new System.IO.FileStream ("test.bin", System.IO.FileMode.Create)
ProtoBuf.Serializer.Serialize (file, wcfData)
file.Close()

// === Future use ===
//[<ServiceContract>]
//type IWCF =
//  
//  [<OperationContract>]
//  [<ProtoBehavior>]
//  abstract Send: wcfData -> unit

【问题讨论】:

    标签: c# wcf serialization f# protobuf-net


    【解决方案1】:

    Protobuf-net 当前没有任何特定的流处理(尽管它会处理 byte[]),尽管我猜它可以简单地使用 Stream(序列化)并重现 @ 987654323@(反序列化)。如果您不想更改模型,应该可以为 Stream 注册一个“代理”,只需几行代码即可完成此操作(如果感兴趣,请告诉我)。

    它自动支持最常见的“元组”模式,但锯齿状数据又是一个问题——尽管再次可以在我们真正需要时进行处理(更常见的是,有一个外部列表自己拥有内部列表的对象是“锯齿状”的实用解决方法,并且目前有效)。

    如果您可以发布一个更完整(理想情况下可运行)的示例,我或许可以提供更多指导。

    【讨论】:

    • 我的目标是尽可能快地通过 WCF 发送锯齿状数组的元组。不管怎样。我试图将其转换为一维数组并返回,但这需要一些我想避免的时间。因此,从锯齿状阵列到导线和背面的任何直接方式都是可取的。这就是为什么我正在考虑将锯齿状数组直接转换为流并返回 - 以使其更快。请参阅我的第一篇文章。
    • @Oldrich 对我来说,Stream 进入的位置并不完全清楚——恐怕我的 F# 很差。数据的最终形态是什么?
    • 现在没有:)。数据的形状类似于Tuple&lt;JaggedArray, JaggedArray, Tuple&lt;JaggedArray, int, Double ...&gt;&gt; 我在想你说的。可能我会从流中获取字节 [] 并改用它。你认为这是通过电线获得锯齿状阵列的最佳方法吗?
    • @Oldroch 我需要完全理解数据才能评论“最佳”;但是当它是 BLOB 时,像 protobuf 这样的所有库都可以帮助您编排它。当然,这可能就足够了。它很可能会击败 DCS。但请注意,protobuf 本身具有诸如打包数组编码之类的东西,这可能是理想的... 如果我可以理解数据足以为其提出模型:p
    • 我不知道如何描述我的数据:)。但可以说这是我的数据:Tuple&lt;Double [][][], Double [][][]&gt;。这是足够的描述吗?我不擅长 C# :)。
    猜你喜欢
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2021-07-16
    相关资源
    最近更新 更多