DongLiORM 第二次更新

DongLiORM進行了第二次更新。
在性能方面改善了許多。
對一個4個字段,每個字段大約10個字符的表,查詢大約每秒12萬~16萬條,新增/刪除大約每秒1600~1800條。
測試環境:
    WinXP Sp2,奔4 2.9G,1.5GB內存, Sql Server Express.

不知這種測試算不算科學。歡迎大家拍磚。

測試用的類
UserItem.cs
Imageusing System;
Image
using System.Collections.Generic;
Image
using System.Collections;
Image
Image
namespace BUL.Security
Image
{
Image   
/// <summary>
Image    
/// 實體類UserItem 。(屬性說明自動提取數據庫字段的描述信息)
Image    
/// </summary>
Image    
/// 

Image    [Serializable]
Image    [DongLiORM.BusinessAttribute(
"UsersView",new string[]{"UserID"},typeof(UserItem))]
Image    
public class UserItem:DongLiORM.BusinessObject
Image    
{
Image        
public UserItem()
Image        
{       
Image        }

Image
Image        
private string _userid;
Image        
private string _username;
Image        
private string _pwd;
Image        
private string _email;
Image        
/// <summary>
Image        
/// 
Image        
/// </summary>

Image        public string UserID
Image        
{
Image            
set { _userid = value; }
Image            
get return _userid; }
Image        }

Image        
/// <summary>
Image        
/// 
Image        
/// </summary>

Image        public string UserName
Image        
{
Image            
set { _username = value; }
Image            
get return _username; }
Image        }

Image        
/// <summary>
Image        
/// 
Image        
/// </summary>

Image        public string Pwd
Image        
{
Image            
set { _pwd = value; }
Image            
get return _pwd; }
Image        }

Image        
/// <summary>
Image        
/// 
Image        
/// </summary>

Image        public string Email
Image        
{
Image            
set { _email = value; }
Image            
get return _email; }
Image        }

Image
Image
Image        
#region Indexer
Image
Image        
public override object this[string PropertyName]
Image        
{
Image            
get
Image            
{
Image                
switch (PropertyName)
Image                
{
Image                    
case "UserID"return _userid;
Image                    
case "UserName"return _username;
Image                    
case "Pwd"return _pwd;
Image                    
case "Email"return _email;
Image                }

Image                
return base[PropertyName];
Image            }

Image            
set
Image            
{
Image                
switch (PropertyName)
Image                
{
Image                    
case "UserID": _userid = (string)value; return;
Image                    
case "UserName": _username = (string)value; return;
Image                    
case "Pwd": _pwd = (string)value; return;
Image                    
case "Email": _email = (string)value; return;
Image                }

Image                
base[PropertyName] = value;
Image            }

Image        }

Image
Image        
#endregion
 
Image    }

Image}

 

測試用到窗體

Imageusing System;
Image
using System.Collections.Generic;
Image
using System.ComponentModel;
Image
using System.Data;
Image
using System.Data.SqlClient;
Image
using System.Drawing;
Image
using System.Text;
Image
using System.Windows.Forms;
Image
using System.Xml.Serialization;
Image
using System.IO;
Image
using BUL.Security;
Image
using DongLiORM;
Image
Image
namespace DongLiCreatorTest
Image
{
Image    
public partial class Form1 : Form
Image    
{
Image        
public Form1()
Image        
{
Image            InitializeComponent();
Image        }

Image
Image        
private void Form1_Load(object sender, EventArgs e)
Image        
{
Image            
this.comboBox1.SelectedIndex = 0;
Image        }

Image
Image        
private void button1_Click(object sender, EventArgs e)
Image        
{
Image            
if(comboBox1.SelectedIndex==0)
Image                InsertTest();
Image            
else if(comboBox1.SelectedIndex==1)
Image                DeleteTest();
Image            
else
Image                SelectTest();
Image        }

Image
Image
Image        
const int MaxLong = 10000;
Image        
private void DeleteTest()
Image        
{   
Image            
long end = 0;
Image
Image            BusinessAttribute Attr 
= BusinessAttribute.GetBusinessAttr(typeof(UserItem));
Image            UserItem AUser 
= null;
Image            
long Start2 = DateTime.Now.Ticks;
Image            
for (int i = 0, j = MaxLong; i < MaxLong; i++, j++)
Image            
{
Image                AUser 
= new UserItem();
Image                AUser.UserID 
= string.Format("U_ID{0}", j);
Image                AUser.UserName 
= string.Format("U_Name{0}", j);
Image                AUser.Pwd 
= string.Format("Pwd{0}", j);
Image                AUser.Email 
= string.Format("Email{0}", j);
Image
Image                Attr.Writer.Delete(AUser);
Image            }

Image            end 
= DateTime.Now.Ticks;
Image            
long Span2 = end - Start2;
Image            label2.Text 
= (1.0F / ((float)Span2 / (float)TimeSpan.TicksPerSecond / (float)MaxLong)).ToString();
Image           
// label2.Text = ((float)Span2 / (float)TimeSpan.TicksPerMillisecond).ToString();
Image

Image
Image            
long Start1 = DateTime.Now.Ticks;
Image            
string Sql = "Delete from  UsersView where UserID=@UserID and UserName=@UserName and Pwd=@Pwd and Email=@Email";
Image            
//SqlConnection con = new SqlConnection("server=.;UID=sa;PWD=cctqa;database=TQM_2007");
Image
            con.Open();
Image            
for (int i = 0; i < MaxLong; i++)
Image            
{
Image                SqlParameter[] Params 
= new SqlParameter[4]
Image                
{
Image                    
new SqlParameter("@UserID",SqlDbType.VarChar,10),
Image                    
new SqlParameter("@UserName",SqlDbType.VarChar,50),
Image                    
new SqlParameter("@Pwd",SqlDbType.VarChar,50),
Image                    
new SqlParameter("@Email",SqlDbType.VarChar,255)
Image                }
;
Image                Params[
0].Value = string.Format("U_ID{0}", i);
Image                Params[
1].Value = string.Format("U_Name{0}",i);
Image                Params[
2].Value = string.Format("Pwd{0}", i);
Image                Params[
3].Value = string.Format("Email{0}", i);
Image
Image
Image                SqlCommand cm 
= new SqlCommand(Sql, con);
Image                
foreach (SqlParameter param in Params)
Image                    cm.Parameters.Add(param);
Image                cm.ExecuteNonQuery();
Image            }

Image
Image            end 
= DateTime.Now.Ticks;
Image            
long Span1 = end - Start1;
Image            label1.Text 
= (1.0F / ((float)Span1 / (float)TimeSpan.TicksPerSecond / (float)MaxLong)).ToString();
Image            
//label1.Text = ((float)Span1 / (float)TimeSpan.TicksPerMillisecond).ToString();
Image
            con.Close();
Image            
//con.Dispose();
Image

Image
Image            
if (Span1 > 0)
Image                MessageBox.Show(((
float)Span2 / (float)Span1).ToString());
Image        }

Image
Image        
private void InsertTest()
Image        
{           
Image            UserItem AUser 
= null;
Image            BusinessAttribute Attr 
= BusinessAttribute.GetBusinessAttr(typeof(UserItem));
Image            
long Start1 = DateTime.Now.Ticks;
Image            
string Sql = "insert into UsersView(UserID,UserName,Pwd,Email) values(@UserID,@UserName,@Pwd,@Email)";
Image            
//SqlConnection con = new SqlConnection("server=.;UID=sa;PWD=cctqa;database=TQM_2007");
Image
            con.Open();
Image            
for (int i = 0; i < MaxLong; i++)
Image            
{
Image                SqlParameter[] Params 
= new SqlParameter[4]
Image                
{
Image                    
new SqlParameter("@UserID",string.Format("U_ID{0}",i)),
Image                    
new SqlParameter("@UserName",string.Format("U_Name{0}",i)),
Image                    
new SqlParameter("@Pwd",string.Format("Pwd{0}",i)),
Image                    
new SqlParameter("@Email",string.Format("Email{0}",i))
Image                }
;
Image                SqlCommand cm 
= new SqlCommand(Sql, con);
Image                
foreach (SqlParameter param in Params)
Image                    cm.Parameters.Add(param);
Image                cm.ExecuteNonQuery();
Image            }

Image           
Image            
long end = DateTime.Now.Ticks;
Image            
long Span1 = end - Start1;
Image            label1.Text 
= (1.0F / ((float)Span1 / (float)TimeSpan.TicksPerSecond / (float)MaxLong)).ToString();
Image            
//label1.Text = ((float)Span1 / (float)TimeSpan.TicksPerMillisecond).ToString();
Image
            con.Close();
Image            
//con.Dispose();
Image

Image
Image            
long Start2 = DateTime.Now.Ticks;
Image            
for (int i = 0, j = MaxLong; i < MaxLong; i++, j++)
Image            
{
Image                AUser 
= new UserItem();
Image                AUser.UserID 
= string.Format("U_ID{0}", j);
Image                AUser.UserName 
= string.Format("U_Name{0}", j);
Image                AUser.Pwd 
= string.Format("Pwd{0}", j);
Image                AUser.Email 
= string.Format("Email{0}", j);
Image
Image                Attr.Writer.Insert(AUser);
Image            }

Image            end 
= DateTime.Now.Ticks;
Image            
long Span2 = end - Start2;
Image            label2.Text 
= (1.0F / ((float)Span2 / (float)TimeSpan.TicksPerSecond / (float)MaxLong)).ToString();
Image            
//label2.Text = ((float)Span2 / (float)TimeSpan.TicksPerMillisecond).ToString();
Image

Image            
if (Span1 > 0)
Image                MessageBox.Show(((
float)Span2 / (float)Span1).ToString());
Image        }

Image        SqlConnection con 
= new SqlConnection("server=.;UID=sa;PWD=cctqa;database=TQM_2007");
private void SelectTest()
Image        
{            
Image            con.Open();
Image
Image            
long end = 0;
Image            
long Start2 = DateTime.Now.Ticks;
Image            BusinessAttribute Attr 
= BusinessAttribute.GetBusinessAttr(typeof(UserItem));
Image            
//            List<UserItem> Users = DBWR.Instance.GetDataThroughReader<UserItem>("Select * from UsersView", null);
Image            
//            label2.Text = (1.0F / ((float)Span2 / (float)TimeSpan.TicksPerSecond / (float)Users.Count)).ToString();
Image
            UserItem[] Users = (UserItem[])Attr.Reader.GetDataByCondition("");
Image            end 
= DateTime.Now.Ticks;
Image            
long Span2 = end - Start2;
Image            label2.Text 
= (1.0F / ((float)Span2 / (float)TimeSpan.TicksPerSecond / (float)Users.Length)).ToString();
Image            
//label2.Text = ((float)Span2 / (float)TimeSpan.TicksPerMillisecond).ToString();
Image
       
Image  
Image            UserItem AUser 
= null;
Image            
long Start1 = DateTime.Now.Ticks;
Image            
string Sql = "select * from UsersView";
Image           
Image            SqlCommand cmd 
= new SqlCommand(Sql, con);
Image            SqlDataReader reader 
= cmd.ExecuteReader();
Image
Image            List
<UserItem> UserList = new List<UserItem>();
Image            
while (reader.Read()) 
Image            
{
Image                
//AUser = ParseARow<UserItem>(row1);
Image
                AUser = new UserItem();
Image                AUser.UserID 
= (string)reader["UserID"];
Image                AUser.UserName 
= (string)reader["UserName"];
Image                AUser.Pwd 
= (string)reader["Pwd"];
Image                AUser.Email 
= (string)reader["Email"];
Image
Image                UserList.Add(AUser);
Image
Image                
//foreach (DataColumn c in table.Columns)
Image                
//{
Image                
//    AUser[c.ColumnName] = row1[c];
Image                
//}
Image
            }

Image            reader.Close();
Image            cmd.Dispose();
Image            con.Close();
Image            
Image
Image            end 
= DateTime.Now.Ticks;
Image            
long Span1 = end - Start1;
Image            label1.Text 
= (1.0F / ((float)Span1 / (float)TimeSpan.TicksPerSecond / (float)UserList.Count)).ToString();
Image            
//label1.Text = ((float)Span1 / (float)TimeSpan.TicksPerMillisecond).ToString();
Image            
Image          
//  con.Dispose();                              
Image

Image            
if (Span1 > 0)
Image                MessageBox.Show(((
float)Span2 / (float)Span1).ToString());
Image        }

Image
Image        
private static T ParseARow<T>(DataRow row1) where T:UserItem,new()
Image        
{
Image            T AUser 
= new T();
Image            
//foreach (DataColumn c in row1.Table.Columns)
Image            
//    AUser[c.ColumnName] = row1[c];
Image
            AUser.UserID = row1["UserID"].ToString();
Image            AUser.UserName 
= row1["UserName"].ToString();
Image            AUser.Pwd 
= row1["Pwd"].ToString();
Image            AUser.Email 
= row1["Email"].ToString();
Image            
return AUser;
Image        }

Image    }

Image}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章