ASP.NET溫故而知新學習系列之ASP.NET多執行緒程式設計—多執行緒查詢資料庫記錄
一:前言
二:多執行緒查詢資料庫記錄例項
一:前言
. 我們假設資料庫裡有500條記錄,每條記錄比作一個金條,那就是有500個金條,一個執行緒比作一個人,一個人取一個金條放置到自己的筐子裡往返一次需要花費掉1分鐘,那麼取完全部的金條且放置在自己的筐子裡共需要花費掉500分鐘,那麼此時有50個人,還是每個人取一個金條放置到自己的筐子裡往返一次需要花費掉1分鐘,那麼此時50個人一起去取金條,那麼取完全部的金條且放置在自己筐子裡共需要10分鐘
. 多個執行緒運作一個任務
二:多執行緒查詢資料庫記錄例項
ThreadSelectDatabase.aspx.cs
namespace EPG.WebAdmin.Test
{
public partial class ThreadSelectDatabase : System.Web.UI.Page
{
private TimeSpan _timeSpent;
public static DataSet _ds;
public TimeSpan timeSpent
{
get { return _timeSpent; }
}
public DataSet DSResult
{
get { return _ds; }
}
protected void Page_Load(object sender, EventArgs e)
{
}
/// <summary>
/// 多執行緒讀取
/// </summary>
/// <returns></returns>
public bool MoreThreadSelectRecord()
{
DateTime started = DateTime.Now;//當前的起始時間
Thread[] thread = new Thread[3];//宣告執行緒的個數
WebSite website;
for (int i = 0; i < 3; i++)
{
website = new WebSite();
thread[i] = new Thread(new ThreadStart(website.SearchRecord));
thread[i].Start();
}
for (int i = 0; i < 3; i++)
{
thread[i].Join();//每一個執行緒都執行完了後,主執行緒返回
}
_timeSpent = DateTime.Now.Subtract(started);
return true;
}
/// <summary>
/// 單執行緒讀取
/// </summary>
/// <returns></returns>
public bool SingleThreadSearchWebSites()
{
DateTime started = DateTime.Now;//當前的起始時間
WebSite website;
website = new WebSite();
website.SearchRecord();
_timeSpent = DateTime.Now.Subtract(started);
return true;
}
/// <summary>
/// 單執行緒讀取按鈕被單擊
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnOneThread_Click(object sender, EventArgs e)
{
if (SingleThreadSearchWebSites())
{
lblInfo.Text = "找到" + DSResult.Tables[0].Rows.Count + "條記錄";
lblInfo.Text += "共花費時間: <font color=\"red\">" + timeSpent + "</font>";
Repeater1.DataSource = DSResult.Tables[0];
Repeater1.DataBind();
}
}
/// <summary>
/// 多執行緒讀取按鈕被單擊
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnMoreThread_Click(object sender, EventArgs e)
{
if (MoreThreadSelectRecord())
{
lblInfo.Text = "找到" + DSResult.Tables[0].Rows.Count + "條記錄";
lblInfo.Text += "共花費時間: <font color=\"red\">" + timeSpent + "</font>";
Repeater1.DataSource = DSResult.Tables[0];
Repeater1.DataBind();
}
}
}
class WebSite
{
public WebSite()
{
}
public void SearchRecord()
{
SqlConnection conn = null;
SqlDataAdapter da = null;
conn = SqlHelper.GetConnection();
string strSQL = "SELECT TOP 5000 CategoryName,CategoryDescription,AddTime FROM CategoryInfo WHERE TypeFlag = 0";
da = new SqlDataAdapter(strSQL, conn);
ThreadSelectDatabase._ds = new DataSet();
da.Fill(ThreadSelectDatabase._ds);
}
}
單擊“單執行緒讀取按鈕”,花費了32秒
單擊“多執行緒讀取按鈕”,花費了093秒