Saar Carmi

A .NET Blog

<November 2008>
SuMoTuWeThFrSa
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456


Navigation

Subscriptions

Post Categories



Monday, September 20, 2004 - Posts

Binary Serialization of DataSets in .Net Framework 2.0

I read Dino Esposito's article about Binary Serialization of DataSets In ADO.NET 2.0.

DataSet serialization is a real pain in the .Net Framework 1.1.

I made a test to check the size and time it take to serialize a DataSet.
The test included memory serialization of the a DataSet with one table and 20,000 rows.

I tested the serialization with inserted rows.

The tests used BinaryFormatter and was run on framework version 2.0.40607.85.

Here are the results:

.Net framework 1.1
5,220,304 bytes , about 14.3 seconds

.Net framework 2.0 with RemotingFormatter = SerializationFormat.Xml :
 5,800,442 bytes , about 13 seconds

.Net framework 2.0 with RemotingFormatter = SerializationFormat.Binary :
 1,727,292 bytes , about 1 minutes and 18 seconds


------

It seems that SerializationFormat indeed saves network traffic, but the problem is that it take too much time to create the serialization stream. There was no real performance change with unchanged rows (after calling to AcceptChanges).

Do I miss anything?

Here is the test code:

using System;

using System.Data;

using System.IO;

using System.Runtime.Serialization;

using System.Runtime.Serialization.Formatters.Binary;

class Class1

{

[STAThread]

static void Main(string[] args)

{

//Create a dataset with a scheme

DataSet ds = new DataSet();

DataTable tbl = ds.Tables.Add ("tbl");

tbl.Columns.Add ("a", typeof(int));

tbl.Columns.Add ("b", typeof(int));

tbl.Columns.Add ("c", typeof(string));

tbl.Columns.Add ("d", typeof(int));

tbl.Columns.Add ("e", typeof(int));

tbl.Columns.Add ("f", typeof(string));

tbl.Columns.Add ("g", typeof(Byte));

tbl.Columns.Add ("y", typeof(int));

tbl.Columns.Add ("i", typeof(int));

tbl.Columns.Add ("j", typeof(string));

tbl.Columns.Add ("k", typeof(int));

tbl.Columns.Add ("l", typeof(int));

tbl.Columns.Add ("m", typeof(string));

tbl.Columns.Add ("n", typeof(int));

tbl.Columns.Add ("o", typeof(string));

tbl.Columns.Add ("p", typeof(DateTime));

tbl.Columns.Add ("q", typeof(DateTime));

ds.RemotingFormat = SerializationFormat.Xml;

//Load rows into dataset

for (int i = 0; i < 20000; i++)

{

ds.Tables["tbl"].Rows.Add (new object[] {

0,1,"a",2,3,"ab",4,5,6,7,8,9,10,11,"abcd",DateTime.Now,DateTime.Now});

}

MemoryStream ms;

BinaryFormatter bf = new BinaryFormatter();

//Record the start time

DateTime s = DateTime.Now;

for (int i = 0; i < 10; i++)

{

//Serialize the dataset into memory

using (ms = new MemoryStream())

{

bf.Serialize (ms, ds);

Console.WriteLine (ms.Position);

}

}

//Record the end time

DateTime e = DateTime.Now;

Console.WriteLine (e-s);

Console.WriteLine (System.Environment.Version.ToString());

}

}

posted Monday, September 20, 2004 4:52 AM by saarc with 3 Comments




Powered by Dot Net Junkies, by Telligent Systems