C#多線程|匿名委托傳參數|測試您的網站能承受的壓力|附源代碼(2)

發表于:2012-02-14來源:博客園作者:Perky Su點擊數: 標簽:C#
upDateStateDelegate是要執行的委托我們前面有定義 ExecDateDiff計算時間差的方法自己寫的如下代碼 /// /// 程序執行時間測試 /// /// 開始時間 /// 結束時間 /// 返回

  upDateStateDelegate是要執行的委托我們前面有定義

  ExecDateDiff計算時間差的方法自己寫的如下代碼

  ///

/// 程序執行時間測試 /// ///開始時間 ///結束時間 /// 返回(秒)單位,比如: 0.00239秒 public static string ExecDateDiff(DateTime dateBegin, DateTime dateEnd) { TimeSpan ts1 = new TimeSpan(dateBegin.Ticks); TimeSpan ts2 = new TimeSpan(dateEnd.Ticks); TimeSpan ts3 = ts1.Subtract(ts2).Duration(); return ts3.TotalMilliseconds.ToString(); }

  復制代碼

  注意,大家一定要記著這里的類型要和委托的類型是一樣的,否則為出錯,而且它不會自動轉化,如果你定義的是String,傳的是int是不可以的, 要手動的去轉,這點請大家注意一下。

  dgvrowid啟動線程所在DataGridview行,一行是一個線程的變化情況

  "總用時(毫秒)" 列名,這里是為了方便 大家看,使用的漢語大家見諒。

  6.啟動線程,我們只要執行一個For就可以循環啟動了,大家一起來看看方法吧,

  private void button3_Click(object sender, EventArgs e) { int count = Convert.ToInt32(txtCount.Text.Trim()); int number = Convert.ToInt32(txtNumber.Text.Trim()); CreateTable(count + 1); //開啟number個線程 for (int i = 0; i < count; i++) { Thread pingTask = new Thread(new ThreadStart(delegate { PingTask(i, number); })); pingTask.Start(); Thread.Sleep(100); } }

  復制代碼

  我們都知道線程是不能直接傳參數的,只能傳Object,但使用匿名委托就可以解決 這個問題,方法如上面,大家看不明白的可以留言給我。

  Thread.Sleep(100); 是為了讓線程正常啟動做了一個時間間隔。

  大家可以根據自己的情況調整

  其實這個例子不但可以實現這樣測試,大家還可以用來訪問數據庫,開上幾千個線程,看看你的Sql代碼訪問速度有多快。

  個人感覺很不錯的一種壓力測試方法

  希望大家多提提建議哦

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97