DataTable,IList性能比较

比较序列化的文件大小

using System;
using System.Data;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization.Formatters.Binary;
using System.Xml.Serialization;
using System.Runtime.Serialization.Json;

namespace Test
{

    [Serializable]
    public class TAcount
    {
        public int FID { get; set; }
        public string FAccount { get; set; }
        public string FLogonPass { get; set; }
        public DateTime FRegisterDate { get; set; }
        public string FLastLogonIP { get; set; }
        public string FEmail { get; set; }
        public string FQQ { get; set; }
        public byte FStatus { get; set; }
        public int FParentID { get; set; }
        public int FGradeID { get; set; }
        public int FCompanyID { get; set; }
        public bool FIsAgent { get; set; }
        public decimal FDefaultKickback { get; set; }
        public int FTotalGeneration { get; set; }
    }


    class Program
    {
        #region 数据源

        private static List<TAcount> GetList(int num)
        {
            List<TAcount> list = new List<TAcount>();

            for (int i = 0; i < num; i++)
            {
                TAcount model = new TAcount()
                {
                    FID = i,
                    FAccount = "rose" + i.ToString(),
                    FLogonPass = "9a84ee41aa72de59c63006aad670bcce",
                    FRegisterDate = DateTime.Now,
                    FLastLogonIP = "127.0.0.1",
                    FEmail = "330345765@qq.com",
                    FQQ = "330345765" + i.ToString(),
                    FStatus = 1,
                    FParentID = 100 + i,
                    FGradeID = 1,
                    FCompanyID = 3652,
                    FIsAgent = i % 2 == 0 ? true : false,
                    FDefaultKickback = i,
                    FTotalGeneration = i,
                };

                list.Add(model);
            }

            return list;
        }

        private static DataTable GetDataTable(int num)
        {
            DataTable dt = new DataTable(); dt.TableName = "TAcount";
            dt.Columns.Add(new DataColumn("FID", typeof(int)));
            dt.Columns.Add(new DataColumn("FAccount", typeof(string)));
            dt.Columns.Add(new DataColumn("FLogonPass", typeof(string)));
            dt.Columns.Add(new DataColumn("FRegisterDate", typeof(DateTime)));
            dt.Columns.Add(new DataColumn("FLastLogonIP", typeof(string)));
            dt.Columns.Add(new DataColumn("FEmail", typeof(string)));
            dt.Columns.Add(new DataColumn("FQQ", typeof(string)));
            dt.Columns.Add(new DataColumn("FStatus", typeof(byte)));
            dt.Columns.Add(new DataColumn("FParentID", typeof(int)));
            dt.Columns.Add(new DataColumn("FGradeID", typeof(int)));
            dt.Columns.Add(new DataColumn("FCompanyID", typeof(int)));
            dt.Columns.Add(new DataColumn("FIsAgent", typeof(bool)));
            dt.Columns.Add(new DataColumn("FDefaultKickback", typeof(decimal)));
            dt.Columns.Add(new DataColumn("FTotalGeneration", typeof(int)));

            for (int i = 0; i < num; i++)
            {
                var dtRows = dt.NewRow();

                dtRows["FID"] = i;
                dtRows["FAccount"] = "rose" + i.ToString();
                dtRows["FLogonPass"] = "9a84ee41aa72de59c63006aad670bcce";
                dtRows["FRegisterDate"] = DateTime.Now;
                dtRows["FLastLogonIP"] = "127.0.0.1";
                dtRows["FEmail"] = "330345765@qq.com";
                dtRows["FQQ"] = "330345765" + i.ToString();
                dtRows["FStatus"] = 1;
                dtRows["FParentID"] = 100 + i;
                dtRows["FGradeID"] = 1;
                dtRows["FCompanyID"] = 3652;
                dtRows["FIsAgent"] = i % 2 == 0 ? true : false;
                dtRows["FDefaultKickback"] = i;
                dtRows["FTotalGeneration"] = i;

                dt.Rows.Add(dtRows);
            }

            return dt;
        }

        #endregion

        /// <summary>
        /// DataTable,IList性能比较
        /// 比较序列化的文件大小
        /// </summary>
        static void Main()
        {
            int num = 100;

            string pathList = @"D:\Serialize\";
            string pathDataTable = @"D:\Serialize\";

            object list = GetList(num);
            object dt = GetDataTable(num);

            try
            {

                #region 二进制序列化

                BinaryFormatter bin = new BinaryFormatter();
                using (FileStream fs = new FileStream(pathList + "binList" + num.ToString() + ".bin", FileMode.Create))
                {
                    bin.Serialize(fs, list);
                    fs.Close();
                }

                using (FileStream fs = new FileStream(pathDataTable + "binDataTable" + num.ToString() + ".bin", FileMode.Create))
                {
                    bin.Serialize(fs, dt);
                    fs.Close();
                }
                #endregion



                #region XML序列化

                XmlSerializer listXmlSerializer = new XmlSerializer(typeof(List<TAcount>));
                XmlSerializer dataTableXmlSerializer = new XmlSerializer(typeof(DataTable));

                using (FileStream fs = new FileStream(pathList + "xmlList" + num.ToString() + ".xml", FileMode.Create))
                {
                    listXmlSerializer.Serialize(fs, list);
                    fs.Close();
                }
                using (FileStream fs = new FileStream(pathDataTable + "xmlDataTable" + num.ToString() + ".xml", FileMode.Create))
                {
                    dataTableXmlSerializer.Serialize(fs, dt);
                    fs.Close();
                }
                #endregion



                #region Json序列化

                DataContractJsonSerializer listJsonSerializer = new DataContractJsonSerializer(typeof(List<TAcount>));
                DataContractJsonSerializer dataTableJsonSerializer = new DataContractJsonSerializer(typeof(DataTable));

                using (FileStream fs = new FileStream(pathList + "JsonSerializerList" + num.ToString() + ".json", FileMode.Create))
                {
                    listJsonSerializer.WriteObject(fs, list);
                    fs.Close();
                }
                using (FileStream fs = new FileStream(pathDataTable + "JsonSerializerDataTable" + num.ToString() + ".json", FileMode.Create))
                {
                    dataTableJsonSerializer.WriteObject(fs, dt);
                    fs.Close();
                }
                #endregion

            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }


            Console.WriteLine("序列化完成");
            Console.ReadLine();
        }
    }
}
View Code

 

20

 

50


100


1000


10000


100000

 

posted @ 2016-08-05 01:23  茗::流  阅读(659)  评论(0)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。