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.ltesting.net