using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
namespace ZipSer
{
internal class Program
{
private static void Main(string[] args)
{
//隨機假造20萬筆User資料
List<User> bigList = GenSimData();
string fileName = "serialized.data";
int indexToTest = 1024; //用來比對測試的筆數
//序列化前取出第indexToTest筆資料的顯示內容
string beforeSer = bigList[indexToTest].Display,
afterDeser = null;
DataContractSerializer dcs =
new DataContractSerializer(bigList.GetType());
Stopwatch sw = new Stopwatch();
sw.Start();
//將List<User>序列化後寫入檔案
using (FileStream stm =
new FileStream(fileName, FileMode.Create))
{
dcs.WriteObject(stm, bigList);
}
sw.Stop();
Console.WriteLine("Serialization: {0:N0}ms", sw.ElapsedMilliseconds);
sw.Reset();
sw.Start();
//由檔案反序列化還原回List<User>
using (FileStream stm =
new FileStream(fileName, FileMode.Open))
{
//還原後一樣取出第indexToTest筆的User顯示內容
afterDeser =
(dcs.ReadObject(stm) as List<User>)[indexToTest].Display;
}
sw.Stop();
Console.WriteLine("Deserialization: {0:N0}ms", sw.ElapsedMilliseconds);
//比對還原後的資料是否相同
Console.WriteLine("Before: {0}", beforeSer);
Console.WriteLine("After: {0}", afterDeser);
Console.WriteLine("Pass Test: {0}", beforeSer.Equals(afterDeser));
Console.Read();
}
private static List<User> GenSimData()
{
List<User> lst = new List<User>();
Random rnd = new Random();
for (int i = 0; i < 200000; i++)
{
lst.Add(new User()
{
Id = Guid.NewGuid(),
RegDate =
DateTime.Today.AddDays(-rnd.Next(5000)),
Name = "User" + i,
Score = rnd.Next(65535)
});
}
return lst;
}
[Serializable]
private class User
{
public Guid Id { get; set; }
public DateTime RegDate { get; set; }
public string Name { get; set; }
public decimal Score { get; set; }
public string Display
{
get
{
return string.Format(
"{0} / {1:yyyy-MM-dd} / {2:N0}",
Name, RegDate, Score);
}
}
}
}
}