Имитация одновременного запроса на доступ многих пользователей к веб-странице - 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); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д