求一段死循环的c#多线程并发访问一个网址的代码

我是做PHP的,想做一下网站压力测试,可惜PHP不支持多线程,祥测试一下我的程序,能支撑1秒钟并发多少个请求;对java没有什么好感,C#不错,刚开始学,弄来弄去总是线程... 我是做PHP的,想做一下网站压力测试,可惜PHP不支持多线程,
祥测试一下我的程序,能支撑1秒钟并发多少个请求;

对java没有什么好感,C#不错,刚开始学,
弄来弄去总是线程正在运行或者结束,不能启动
跪求高手了。

这个程序用控制台程序做,不用winform;

问题补充:

还有,我看到 有些人写的程序 申明私有一个变量 int _a 在用
public int A{
get{
return _a;
}
set{
_a=value;
}
这东西有什么意义呢
}
展开
 我来答
ThinkIBM
2010-12-15 · TA获得超过5289个赞
知道大有可为答主
回答量:3263
采纳率:0%
帮助的人:5414万
展开全部
首先回答你的问题:
public int A{ get{ return _a; }set{_a=value;}}
这叫封装属性,可以在get或set里对值进行处理,比如这个值不能大于100
可以修改为:
set{if(value<=100){_a=value;}} 不用属性的话,每个调用_a的地方都要加这段代码,多麻烦

刚好做了一个类似的测试,比你的要求复杂一些,你自己看吧:
// 点击按钮,开始循环测试
private void button1_Click(object sender, EventArgs e)
{
textBox4.Text = string.Empty;
string testUrl = txtUrl.Text; // 测试地址
string postData = "killId=" + txtKillid.Text; // 测试的参数,要post的数据
int threadNum = int.Parse(txtThreadNum.Text); // 发起的线程数,每个线程为一个新的Session,你要无限的话,可以设置为int.MaxValue
int threadTime = 10; // 每个线程跑10次,这是用于要用同一个Session测试10次的情况

for (int i = 0; i < threadNum; i++)
{
string[] arr = { testUrl, postData, killTime, i.ToString() };
new Thread(Post).Start(arr); // 开始当前线程测试
}
}

public void Post(object arr)
{
string[] para = arr as string[];
string testUrl = para[0];
string postData = para[1];
int killTime = int.Parse(para[2]);
int threadNum = int.Parse(para[3]);

CookieContainer cookie = new CookieContainer();
while (killTime > 0)
{
HttpWebRequest request = WebRequest.Create(testUrl) as HttpWebRequest;
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
request.CookieContainer = cookie;

byte[] bodyBytes = Encoding.UTF8.GetBytes(postData);
request.ContentLength = bodyBytes.Length;
using (Stream reqStream = request.GetRequestStream())
{
reqStream.Write(bodyBytes, 0, bodyBytes.Length);
reqStream.Flush();
}

request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;)";

killTime--;
using (WebResponse response = request.GetResponse())
using (Stream sr = response.GetResponseStream())
using (StreamReader reader = new StreamReader(sr))
{
// 把网页返回的内容输出到TextBox中
SetText(textBox4,
threadNum + "," + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + ":" + reader.ReadToEnd());
}
cookie = request.CookieContainer;
Thread.Sleep(100);
}
}

/// <summary>
/// 用于线程里访问TextBox的线程委托
/// </summary>
/// <param name="tb"></param>
/// <param name="txt"></param>
private delegate void SetTextDelegate(TextBox tb, string txt);
private void SetText(TextBox tb, string txt)
{
if (!tb.InvokeRequired)
{
tb.Text += txt + "\r\n";
}else
{
SetTextDelegate de =SetText;
Invoke(de, tb, txt);
//de.Invoke(txt);
}
}
65169947
2010-12-16
知道答主
回答量:34
采纳率:0%
帮助的人:20.7万
展开全部
问百度找几个压力测试软件用就行了,人家弄的很全很专业,你自己写出来的东西还不一定准不准,能不能用的呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
去年养了只兔子
2010-12-15 · TA获得超过558个赞
知道答主
回答量:170
采纳率:0%
帮助的人:53.4万
展开全部
int _a 就是个变量 不过封转了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式