Имитация одновременного запроса на доступ многих пользователей к веб-странице - C#
Формулировка задачи:
Проблема в следующем: необходимо имитировать одновременный запрос многих пользователей к Web-странице (пишу программку для тестирования). Я так понимаю суть в том, чтобы создать N-ое количество потоков и запустить их
одновременно
. C# я знаю довольно-таки неплохо, но в работе с Threads и ThreadPool не сильна (практики почти никакой). Подскажите, как лучше создать потоки и как заставить их стартовать одномоментно (или почти одномоментно, чтобы погрешностью можно было бы пренебречь). Сразу скажу, что по форуму поиск не дал особо пригодных результатов((Решение задачи: «Имитация одновременного запроса на доступ многих пользователей к веб-странице»
textual
Листинг программы
public partial class Form1 : Form
{
DateTime finishTime;
static object locker = new object();
static int threadsCount;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
textBox2.Text = "";
int count = int.Parse(textBox6.Text);
threadsCount = count;
DateTime startTime;
userName = textBox3.Text;
password = textBox4.Text;
startTime = DateTime.Now;
ThreadPool.SetMaxThreads(count, count);
for (int i = 0; i < count; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(MultiReq),i);
}
lock (locker)
{
while (threadsCount > 0)
{
Monitor.Wait(locker);
finishTime = DateTime.Now;
}
}
textBox2.Text = (finishTime - startTime).TotalMilliseconds.ToString();
}
void MultiReq(object ty)
{
var reqGET = (HttpWebRequest)WebRequest.Create(textBox1.Text);
reqGET.PreAuthenticate = true;
reqGET.UserAgent = "Mozila/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2;";
reqGET.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash,application/vnd.ms-excel, application/vnd.ms-powerpoint,application/msword, */*";
reqGET.Headers.Add("Accept-Language", "ru");
try
{
var resp = (HttpWebResponse)reqGET.GetResponse();
Stream stream = resp.GetResponseStream();
StreamReader sr = new StreamReader(stream, Encoding.GetEncoding(1251));
textBox5.Text = sr.ReadToEnd();
sr.Close();
stream.Close();
resp.Close();
}
catch
{
textBox2.Text = "Error!";
}
lock (locker)
{
threadsCount--;
Monitor.Pulse(locker);
}
}
}