#region MessageEntity
[Serializable]
public partial class MessageCollection : CollectionBase {
public void Add( MessageEntity item ) {
base.List.Add( item );
}
public void Remove( MessageEntity item ) {
base.List.Remove( item );
}
public MessageEntity this[ int index ] {
get { return List[ index ] as MessageEntity; }
set { List[ index ] = value; }
}
}
[Serializable]
public partial class MessageEntity {
#region definition
public static readonly MessageEntity Empty = new MessageEntity();
public event PropertyChangedEventHandler PropertyChanged;
#endregion
#region default construnction
/// <summary>
/// Message
/// </summary>
public MessageEntity() { }
public MessageEntity( String ID, String AccountID, String To, String From, String Cc, String Bcc, String Subject, String HtmlBody, String MessageID, Int32 Size, DateTime CreateDate, Int32 Type, Int32 Priority, Int32 Extend )
: this() {
_ID = ID;
_AccountID = AccountID;
_To = To;
_From = From;
_Cc = Cc;
_Bcc = Bcc;
_Subject = Subject;
_HtmlBody = HtmlBody;
_MessageID = MessageID;
_Size = Size;
_CreateDate = CreateDate;
_Type = Type;
_Priority = Priority;
_Extend = Extend;
}
#endregion
#region Field
private String _ID;
private String _AccountID;
private String _To;
private String _From;
private String _Cc;
private String _Bcc;
private String _Subject;
private String _HtmlBody;
private String _MessageID;
private Int32 _Size;
private DateTime _CreateDate = DateTime.MinValue;
private Int32 _Type;
private Int32 _Priority;
private Int32 _Extend;
#endregion
#region Property
public String ID {
get { return _ID; }
set {
_ID = value;
FirePropertyChanged( "ID" );
}
}
public String AccountID {
get { return _AccountID; }
set {
_AccountID = value;
FirePropertyChanged( "AccountID" );
}
}
public String To {
get { return _To; }
set {
_To = value;
FirePropertyChanged( "To" );
}
}
public String From {
get { return _From; }
set {
_From = value;
FirePropertyChanged( "From" );
}
}
public String Cc {
get { return _Cc; }
set {
_Cc = value;
FirePropertyChanged( "Cc" );
}
}
public String Bcc {
get { return _Bcc; }
set {
_Bcc = value;
FirePropertyChanged( "Bcc" );
}
}
public String Subject {
get { return _Subject; }
set {
_Subject = value;
FirePropertyChanged( "Subject" );
}
}
public String HtmlBody {
get { return _HtmlBody; }
set {
_HtmlBody = value;
FirePropertyChanged( "HtmlBody" );
}
}
public String MessageID {
get { return _MessageID; }
set {
_MessageID = value;
FirePropertyChanged( "MessageID" );
}
}
public Int32 Size {
get { return _Size; }
set {
_Size = value;
FirePropertyChanged( "Size" );
}
}
public DateTime CreateDate {
get { return _CreateDate; }
set {
_CreateDate = value;
FirePropertyChanged( "CreateDate" );
}
}
public Int32 Type {
get { return _Type; }
set {
_Type = value;
FirePropertyChanged( "Type" );
}
}
public Int32 Priority {
get { return _Priority; }
set {
_Priority = value;
FirePropertyChanged( "Priority" );
}
}
public Int32 Extend {
get { return _Extend; }
set {
_Extend = value;
FirePropertyChanged( "Extend" );
}
}
#endregion
#region method
public static bool IsNullOrEmpty( MessageEntity e ) {
return e == null || e == Empty;
}
protected void FirePropertyChanged( string propertyName ) {
if( this.PropertyChanged != null ) {
this.PropertyChanged( this, new PropertyChangedEventArgs( propertyName ) );
}
}
#endregion
}
#endregion
测试代码片断,其中有一个DEV的GridControl对象,绑定上去即可
private void button5_Click( object sender, EventArgs e ) {
if( string.IsNullOrEmpty( textBox2.Text ) ) {
MessageBox.Show( "请输入要测试的对象数量" );
return;
}
int max = int.Parse( textBox2.Text );
StringBuilder sb = new StringBuilder();
for( int i = 0; i < 10240; i++ ) {
sb.Append("ab");
}
MessageCollection collection = new MessageCollection();
Stopwatch s = new Stopwatch();
MessageEntity item = new MessageEntity();
item.AccountID = Guid.NewGuid().ToString();
item.Bcc = "bcc";
item.Cc = "cc";
item.CreateDate = DateTime.Now;
item.Extend = 0;
item.From = "from";
item.ID = Guid.NewGuid().ToString();
item.HtmlBody = sb.ToString();
item.MessageID = Guid.NewGuid().ToString();
item.Priority = 0;
item.Size = 100;
item.Subject = "subject";
item.To = "to";
item.Type = 0;
s.Start();
for( int i = 0; i < max; i++ ) {
item.ID = Guid.NewGuid().ToString();
collection.Add( item );
}
s.Stop();
this.textBox1.Text = string.Format( "构造{2}条数据总用时{0}毫秒{1}", s.Elapsed.TotalMilliseconds.ToString( "0.00" ), Environment.NewLine, max );
s.Reset();
s.Start();
{
IFormatter formatter = new BinaryFormatter();
using( Stream stream = new FileStream( "MyFile.bin", FileMode.Create,
FileAccess.Write, FileShare.None ) ) {
formatter.Serialize( stream, collection );
stream.Close();
}
}
s.Stop();
this.textBox1.Text += string.Format( "序列化{2}条数据总用时{0}毫秒{1}", s.Elapsed.TotalMilliseconds.ToString( "0.00" ), Environment.NewLine, max );
s.Reset();
MessageCollection myObj = null;
s.Start();
{
IFormatter formatter = new BinaryFormatter();
using( Stream stream = new FileStream( "MyFile.bin", FileMode.Open,
FileAccess.Read, FileShare.Read ) ) {
MessageCollection obj = myObj = (MessageCollection)formatter.Deserialize( stream );
stream.Close();
//gridControl1.DataSource = obj;
//gridControl1.DataMember = "MessageEntity";
}
}
s.Stop();
this.textBox1.Text += string.Format( "反序列化{2}条数据总用时{0}毫秒{1}", s.Elapsed.TotalMilliseconds.ToString( "0.00" ), Environment.NewLine, max );
s.Reset();
s.Start();
{
gridControl1.DataSource = myObj;
}
s.Stop();
this.textBox1.Text += string.Format( "绑定{2}条数据总用时{0}毫秒{1}", s.Elapsed.TotalMilliseconds.ToString( "0.00" ), Environment.NewLine, max );
//Process.Start( "explorer.exe", Application.StartupPath );
}
1千条数据测试结果
构造1000条数据总用时0.76毫秒
序列化1000条数据总用时4.86毫秒
反序列化1000条数据总用时1.84毫秒
绑定1000条数据总用时108.89毫秒
1万条数据测试结果
构造10000条数据总用时7.75毫秒
序列化10000条数据总用时6.38毫秒
反序列化10000条数据总用时5.31毫秒
绑定10000条数据总用时6.41毫秒
10万条测试结果
构造100000条数据总用时105.99毫秒
序列化100000条数据总用时26.38毫秒
反序列化100000条数据总用时63.78毫秒
绑定100000条数据总用时4.51毫秒
100万条测试结果
构造1000000条数据总用时655.25毫秒
序列化1000000条数据总用时216.65毫秒
反序列化1000000条数据总用时710.97毫秒
绑定1000000条数据总用时6.99毫秒
500万条测试结果
构造5000000条数据总用时3505.64毫秒
序列化5000000条数据总用时1114.01毫秒
反序列化5000000条数据总用时5070.87毫秒
绑定5000000条数据总用时2.74毫秒
1000万条测试结果
内存溢出~