1. 程式人生 > >ASP.NET溫故而知新學習系列之ASP.NET多執行緒程式設計—多執行緒查詢資料庫記錄

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秒