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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы