예제 #1
0
        public void TestBinaryStreams()
        {
            System.Data.DataTable dt1 = new DataTable();
            dt1.Columns.Add(new DataColumn("Float", typeof(float)));
            dt1.Columns.Add(new DataColumn("Double", typeof(double)));
            dt1.Columns.Add(new DataColumn("String", typeof(string)));
            dt1.Columns.Add(new DataColumn("Boolean", typeof(bool)));
            dt1.Columns.Add(new DataColumn("Int32", typeof(int)));
            dt1.Columns.Add(new DataColumn("UInt32", typeof(uint)));
            dt1.Columns.Add(new DataColumn("Int64", typeof(long)));
            dt1.Columns.Add(new DataColumn("UInt64", typeof(ulong)));
            dt1.Columns.Add(new DataColumn("Time", typeof(TimeSpan)));
            dt1.Columns.Add(new DataColumn("DateTime", typeof(DateTime)));

            for (int i = 0; i < 10; ++i)
            {
                DataRow dr = dt1.NewRow();
                dr[0] = 1.0;
                dr[1] = 2.0;
                dr[2] = "value";
                dr[3] = true;
                dr[4] = 4;
                dr[5] = 5;
                dr[6] = 6;
                dr[7] = 7;
                dr[8] = new TimeSpan(1, 2, 3, 4, 5);
                dr[9] = new DateTime(2010, 1, 2, 3, 4, 5, 6);

                dt1.Rows.Add(dr);
            }

            Variant v1 = new Variant(dt1);

            byte[] bytes = BinaryWriter.ToBytes(v1);

            Variant v2 = BinaryReader.FromBytes(bytes);

            DataTable dt2 = v2.AsDataTable();

            Assert.AreEqual(dt1.Rows.Count, dt2.Rows.Count);
            Assert.AreEqual(dt1.Columns.Count, dt2.Columns.Count);

            for (int i = 0; i < dt1.Columns.Count; ++i)
            {
                Assert.AreEqual(dt1.Columns[i].ColumnName, dt2.Columns[i].ColumnName);
                Assert.AreEqual(dt1.Columns[i].DataType, dt2.Columns[i].DataType);
            }

            Assert.AreEqual(1.0, (float)dt2.Rows[0][0]);
            Assert.AreEqual(2.0, (double)dt2.Rows[0][1]);
            Assert.AreEqual("value", (string)dt2.Rows[0][2]);
            Assert.AreEqual(true, (bool)dt2.Rows[0][3]);
            Assert.AreEqual(4, (int)dt2.Rows[0][4]);
            Assert.AreEqual(5, (uint)dt2.Rows[0][5]);
            Assert.AreEqual(6, (long)dt2.Rows[0][6]);
            Assert.AreEqual(7, (ulong)dt2.Rows[0][7]);
            Assert.AreEqual(new TimeSpan(1, 2, 3, 4, 5), (TimeSpan)dt2.Rows[0][8]);
            Assert.AreEqual(new DateTime(2010, 1, 2, 3, 4, 5, 6), (DateTime)dt2.Rows[0][9]);
        }
예제 #2
0
        public void TestConstruction()
        {
            System.Data.DataTable dt1 = new DataTable();
            dt1.Columns.Add(new DataColumn("Double", typeof(double)));
            dt1.Columns.Add(new DataColumn("String", typeof(string)));

            DataRow dr = dt1.NewRow();

            dr[0] = 1.0;
            dr[1] = "value";

            dt1.Rows.Add(dr);

            Variant v1 = new Variant(dt1);

            Assert.AreEqual(v1.Type, Variant.EnumType.DataTable);
            Assert.IsTrue(v1.Is(Variant.EnumType.DataTable));

            Assert.DoesNotThrow(delegate { v1.AsDataTable(); });
            Assert.Throws <VariantException>(delegate { v1.As <int>(); });
        }
예제 #3
0
        public void TestPerformance()
        {
            System.Data.DataTable dt1 = new DataTable();
            dt1.Columns.Add(new DataColumn("column 0", typeof(double)));
            dt1.Columns.Add(new DataColumn("column 1", typeof(string)));
            dt1.Columns.Add(new DataColumn("column 2", typeof(DateTime)));

            dt1.RemotingFormat = SerializationFormat.Binary;

            for (int i = 0; i < 1000000; ++i)
            {
                DataRow dr1 = dt1.NewRow();
                dr1[0] = (double)i;
                dr1[1] = "value1";
                dr1[2] = new DateTime(2010, 1, 1);

                dt1.Rows.Add(dr1);
            }

            // Variant serialisation (uncompressed)
            DateTime t1 = DateTime.Now;

            byte[] bytes1 = BinaryWriter.ToBytes(new Variant(dt1));

            DateTime t2 = DateTime.Now;

            Variant v2 = BinaryReader.FromBytes(bytes1);

            DateTime t3 = DateTime.Now;

            System.Console.WriteLine("Variant serialisation size={0}, time={1}", bytes1.Length, t2 - t1);
            System.Console.WriteLine("Variant deserialisation, time={0}", t3 - t2);

            Assert.AreEqual(3, v2.AsDataTable().Columns.Count);
            Assert.AreEqual(1000000, v2.AsDataTable().Rows.Count);

            // Variant serialisation (compressed)
            DateTime t4 = DateTime.Now;

            byte[] bytes2 = BinaryWriter.ToBytes(new Variant(dt1), BinaryMode.Compress);

            DateTime t5 = DateTime.Now;

            Variant v3 = BinaryReader.FromBytes(bytes2);

            DateTime t6 = DateTime.Now;

            System.Console.WriteLine("Variant serialisation (compressed) size={0}, time={1}", bytes2.Length, t5 - t4);
            System.Console.WriteLine("Variant deserialisation (compressed), time={0}", t6 - t5);

            Assert.AreEqual(3, v3.AsDataTable().Columns.Count);
            Assert.AreEqual(1000000, v3.AsDataTable().Rows.Count);

            // .NET serialisation
            DateTime t7 = DateTime.Now;

            MemoryStream    ms = new MemoryStream();
            BinaryFormatter bf = new BinaryFormatter();

            bf.Serialize(ms, dt1);

            DateTime t8 = DateTime.Now;

            ms.Position = 0;
            DataTable dt2 = (DataTable)bf.Deserialize(ms);

            DateTime t9 = DateTime.Now;

            System.Console.WriteLine(".NET serialisation size={0}, time={1}", ms.GetBuffer().Length, t8 - t7);
            System.Console.WriteLine(".NET deserialisation time={0}", t9 - t8);

            Assert.AreEqual(3, dt2.Columns.Count);
            Assert.AreEqual(1000000, dt2.Rows.Count);
        }