using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Text.Json; namespace DataTable { class Program { static void Main(string[] args) { var listDtos = new List(100); /* *** Size of TestDto calc *** * * ** data binary size (Not implemented) ** * Date : DateTime : 4b * Mode : int32? : 4b * User : string : 2-64b * WellDepth : double? : 8b * TOTAL data size = 18-80b * * ** header binary size (Not implemented) ** * *DateTime : len("DateTime") + 2 + len("Date") + 2 = 16b * Mode : 14b * User : 14b * WellDepth : 20b * columnsCount : 2b * TOTAL header size = 66b * * ** json as tab ** * * header size: 137b * json row size: 63b * * total for 1 record : 200b * total for 2 records : 263b * * ** json as list ** * * Raw listItem size: 175b * total for 2 records : 350b * * ** example 100 records ** * tabJsonBytes: 6602 * listJsonBytes: 9628 * tabBinBytes: 7765 (by dangerous BinaryFormatter) * listBinBytes: 4366 (by dangerous BinaryFormatter) */ for (int i = 0; i < 100; i++) listDtos.Add(new TestDto{ Date = DateTime.Now.AddSeconds(i), Mode = 1, WellDepth = i * Math.PI }); var tMapper = new TableMapper(); var tab = tMapper.MakeTable(listDtos); var e = tMapper.AsEnumerable(tab); var tabJson = JsonSerializer.Serialize(tab); var listJson = JsonSerializer.Serialize(listDtos); var tabJsonBytes = JsonSerializer.SerializeToUtf8Bytes(tab); var listJsonBytes = JsonSerializer.SerializeToUtf8Bytes(listDtos); var formatter = new BinaryFormatter(); var mem = new MemoryStream(); formatter.Serialize(mem, tab); var tabBinBytes = new byte[mem.Length]; Array.Copy(mem.GetBuffer(), tabBinBytes, mem.Length); mem = new MemoryStream(); formatter.Serialize(mem, listDtos); var listBinBytes = new byte[mem.Length]; Array.Copy(mem.GetBuffer(), listBinBytes, mem.Length); Console.WriteLine($"tabJsonBytes:{tabJsonBytes.Length}"); Console.WriteLine($"listJsonBytes:{listJsonBytes.Length}"); Console.WriteLine($"tabBinBytes:{tabBinBytes.Length}"); Console.WriteLine($"listBinBytes:{listBinBytes.Length}"); } } }