protobuf-net序列化性能问题

| 我已经开始测试protobuf-net进行序列化。我看过一些基准测试(http://www.servicestack.net/benchmarks/NorthwindDatabaseRowsSerialization.100000-times.2010-08-17.html),该基准测试建议更快的序列化和更小的文件。 我确实看到所生成文件的大小存在巨大差异。但是,我看到的速度是WCF的DataContractSerializer的5%以内。 那让我想知道我做错了什么吗? 这是我的测试代码:
private static void ProtoBufSerializer(IQueryable<DataRow> details)
    {
        List<DataRow> list = details.ToList();

        using (var file = File.Create(\"protobuf2.bin\"))
        {                
            Serializer.Serialize<List<DataRow>>(file, list);
        }
    }

    private static void DataContractSerializer(IQueryable<DataRow> details)
    {
        DataContractSerializer serializer = new DataContractSerializer(typeof(List<DataRow>));
        List<DataRow> list = details.ToList();

        using (FileStream fileStream = new FileStream(\"testSerializationDataContract.xml\", FileMode.Create))
        {
            serializer.WriteObject(fileStream, list);
        }            
    }

[ProtoContract]
public class DataRow
{
    [ProtoMember(1)]
    public DRFDataRow DrfDataRow;

    [ProtoMember(2)]
    public Guid guid;
}

[ProtoContract]
public class DRFDataRow : FixedWidthRow
{
    [ProtoMember(1)]
    public int CompanyNumber { get; set; }

    // several fields abreviated for brevety
}

[ProtoContract, ProtoInclude(100, \"DRFDataRow\")]
public abstract class FixedWidthRow : IProviderRow
{
    // several fields abreviated for brevety
我的列表中大约有73k件商品。每个项目都不太大,尽管DRFDataRow中有很多字段(大约50个)。 附注:我没有抱怨,我对结果感到非常满意,因为序列化结果的大小非常小,我只是想知道我是否还能重现基准测试中看到的速度提升。
已邀请:
在该示例中,时间的开始和结束位置尚不完全清楚-例如,如果您要包括从ѭ1中获取数据的时间,则很可能会遇到瓶颈。合同看起来还不错。如果您愿意,可以进行一些小的优化,但是没有什么大的优化(尽管使用基于组的子对象应该通过避免一些缓冲来有所帮助;在子对象
[ProtoMember(... {here})]
[ProtoInclude(... {here})]
中添加
DataFormat=DataFormat.Group
)。 如果问题不是“ 1”,那么完全可以彻底检查内部结构的v2(当前可以作为alpha或来源)可能很值得尝试。 要获得更详细的答案,我需要一个完全可复制的示例进行调查。

要回复问题请先登录注册