偶尔的Protobuf.net异常 - 检查元数据时超时

时间:2014-09-03 14:09:52

标签: c# protobuf-net

在极少数情况下,我在检查元数据异常时获得了Timeout。 当服务器RAM达到95%,CPU超过70%时,我才看到它,即使这样也无法再现它。此外,仅在序列化List< OrderLine>时报告了它。例如,OrderLine是:

[Serializable, ProtoContract]
public class OrderLine {

    public OrderLine() { }

    [ProtoMember(1)]
    public decimal ID { get; set; }

    [ProtoMember(2)]
    public string Text { get; set; }

    [ProtoMember(3)]
    public double Qty { get; set; }

    [ProtoMember(4)]
    public DateTime When { get; set; }

    [ProtoMember(5)]
    public OrderTypes OrderType { get; set; }
}

OrderTypes是一个枚举。

我使用protobuf-net进行序列化,然后将.net实例持久保存到SQLServer数据库。它与几个并行工作的线程异步完成。

我在这里读到,在启动时预编译序列化程序有助于或避免此异常。这是一个在启动时运行的简短代码段:

    static object mysync = new object();
    static ProtoBuf.Meta.RuntimeTypeModel protobufmodel = null;
    ...
    lock (mysync) {
        var pbtypes = new Type[] {
            ... several other types but no Orderline ...
            typeof(List<OrderLine>),
        };
        protobufmodel = ProtoBuf.Meta.TypeModel.Create();
        pbtypes.Select(t => protobufmodel.Add(t, true));
        protobufmodel.CompileInPlace();
    }

我的问题:我是否还应该将OrderLine类型添加到模型中(即,到pbtypes数组)?那会有帮助吗?或者CompileInPlace是否足以拥有List&lt; OrderLine&gt; ?

0 个答案:

没有答案