Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Постоянные тормоза


Автор: Dobermann 14.2.2010, 11:15
Насколько я начинаю понимать, без потоков такая прога "отвиснет" только после полной отработки (т.е. когда закончится список проксей)
Код

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog proxy = new OpenFileDialog();
            proxy.ShowDialog();
            prx = proxy.FileName;
            Proxy();
        }
 
        public void Proxy()
        {
            string tempLine;  // пример 218.201.21.176:80
            StreamReader readProxyList = new StreamReader(@prx);
            while ((tempLine = readProxyList.ReadLine()) != null)
            {
                    WebProxy proxyObject = new WebProxy("http://" + tempLine);
                    WebRequest req = WebRequest.Create("http://mail.ru/");
                    req.Proxy = proxyObject;
                    WebResponse res = (WebResponse)req.GetResponse();                    
                    listBox1.Items.Add(tempLine + " (" + req.Timeout + ")");
            }
        }
з.ы. это простейшая чекалка

Автор: Экскалупатор 14.2.2010, 16:50
да. без потоков никак.
 smile 
ИМХО
методы конечно жесткие... с какой целью был создан метод Proxy вообще не понятно. точнее, для чего, понятно, что бы отделить и не писать все в обработчике(или я не прав?) вот только лучше от этого не стало...

Автор: Dobermann 15.2.2010, 17:33
перед вызовом этого метода потоки реализовывались, просто вырезал, думал мож ты че дельного предложешь, а не ...

Автор: Экскалупатор 15.2.2010, 18:21
Dobermann, без использования других потоков, все будет выполняться в одном потоке, и соответственно пока твой метод по проверке не закончиться, то остальная прога будет его ждать, т.е. "висеть". так что ничего "дельнее" чем использовать потоки предложить сложно. можно может разделить, т.е. сделать другую прогу, которая будет проверять то что тебе нужно, а ты в этой проге будешь просматривать результаты, но это изврат полный. так что остаются потоки... лично я больше ничего предложить не могу.

Добавлено через 3 минуты и 5 секунд
а для чего проверять доступность всех Proxy? ты ж одновременно со всеми все равно не будешь. может проще проверить конкретный адрес и, если он доступен, то обратиться к нему, а если не доступен перейти к следующему, пока не найдется рабочий. 
это будет быстрее нежели ждать пока провериться весь список.
хотя я не знаю специфики приложения, а по сему могу и ошибаться...

Добавлено через 8 минут и 55 секунд
к тому же тебе наверняка придется делать проверку этого прокси перед использованием...

Автор: Dobermann 16.2.2010, 04:31
Цитата(Экскалупатор @  15.2.2010,  18:21 Найти цитируемый пост)
а для чего проверять доступность всех Proxy?

Да это просто пример зависания проги(без потоков)...а проверять все - какие сдохли а какие нет, ведь те что сдохли предпочтительней будет удалить из списка...

Автор: Экскалупатор 16.2.2010, 12:02
я ж и говорю, что если проверять конкретный адрес перед самым его использованием, то это будет быстрее нежели проверять все сразу. и тогда, может быть, можно было бы обойтись без потоков(хотя и сомнительно это).

Автор: GavriKos 17.2.2010, 16:39
Есть еще вариант, без реализации потоков в лоб. Реализовать все таймером. Т.е. чтобы по очередной итерации цикла запускался таймер и цикл ждал его завершения. Но это неспортивно )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)