protected void CheckSerializerPerf(PivotData pvtData, string serializerName, Func <PivotDataState, object> serialize, Func <object, PivotDataState> deserialize) { var sw = new Stopwatch(); sw.Start(); var pvtState = pvtData.GetState(); sw.Stop(); Console.WriteLine("PivotData GetState time: {0}", sw.Elapsed); sw.Restart(); var serializedState = serialize(pvtState); sw.Stop(); Console.WriteLine("PivotDataState {0} serialize time: {1}", serializerName, sw.Elapsed); sw.Restart(); var pvtStateFromSerialized = deserialize(serializedState); sw.Stop(); Console.WriteLine("PivotDataState {0} Deserialize time: {1}", serializerName, sw.Elapsed); var pvtData3 = new PivotData(new string[] { "year", "month", "a", "i" }, new CountAggregatorFactory(), true); sw.Restart(); pvtData3.SetState(pvtStateFromSerialized); sw.Stop(); Console.WriteLine("PivotData SetState time: {0}", sw.Elapsed); Assert.Equal(pvtState.KeyValues.Length, pvtStateFromSerialized.KeyValues.Length); Assert.Equal(pvtState.ValueKeys.Length, pvtStateFromSerialized.ValueKeys.Length); Assert.Equal(pvtState.Values.Length, pvtStateFromSerialized.Values.Length); }
public void PivotData_GetState() { var testData = generateData(); var pvtData = new PivotData(new string[] { "name", "qty" }, new CountAggregatorFactory(), testData, false); var pvtState = pvtData.GetState(); var pvtData2 = new PivotData(new string[] { "name", "qty" }, new CountAggregatorFactory(), false); pvtData2.SetState(pvtState); Action <PivotData, PivotData> check = (pvt1, pvt2) => { Assert.Equal(pvt1.AllValues.Count, pvt2.AllValues.Count); Assert.Equal(pvt1[ValueKey.Empty2D].Value, pvt2[ValueKey.Empty2D].Value); foreach (var vk in pvt1.AllValues) { Assert.Equal(pvt1[vk.Key].Value, pvt2[vk.Key].Value); Assert.Equal(pvt1[vk.Key].Count, pvt2[vk.Key].Count); } }; check(pvtData, pvtData2); var jsonState = JsonConvert.SerializeObject(pvtState); //Output.WriteLine(jsonState); var pvtStateFromJson = JsonConvert.DeserializeObject <PivotDataState>(jsonState); var pvtData3 = new PivotData(new string[] { "name", "qty" }, new CountAggregatorFactory(), false); pvtData3.SetState(pvtStateFromJson); check(pvtData, pvtData3); // internal serialization var memStream = new MemoryStream(); pvtState.Serialize(memStream); memStream = new MemoryStream(memStream.ToArray()); var pvtStateFromSerialized = PivotDataState.Deserialize(memStream); var pvtData4 = new PivotData(new string[] { "name", "qty" }, new CountAggregatorFactory(), false); pvtData4.SetState(pvtStateFromSerialized); check(pvtData, pvtData4); }