在极少数情况下,我在检查元数据异常时获得了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; ?