Я начал тестировать protobuf-net для сериализации. Я видел тесты (http://www.servicestack.net/benchmarks/NorthwindDatabaseRowsSerialization.100000-times.2010-08-17.html), которые предлагали быструю сериализацию и меньшие файлы.
Я действительно вижу огромную разницу в размере создаваемых файлов. Тем не менее, скорость, которую я вижу, находится в пределах 5% от DataContractSerializer WCF.
Это заставило меня задуматься, делаю ли я что-то не так?
Вот код моих тестов:
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
В моем списке около 73 тыс. Предметов. Каждый элемент не слишком большой, хотя в DRFDataRow есть много полей (около 50).
П.С .: Я не жалуюсь, я очень доволен результатами, поскольку размер сериализованных результатов намного меньше, мне просто интересно, могу ли я также воспроизвести увеличение скорости, которое я видел в тестах.