Почему этот код WebRequest является медленным?

Вы можете использовать это

^(?=.*[1-9])-?\d+$
  • ^ - Начало строки.
  • (?=.*[1-9]) - условие для ненулевых значений.
  • -? - Матчи - при запуске. (? делает его необязательным)
  • \d+ - Соответствует цифрам от 0 до 9 один или несколько раз.
  • $ - Конец строки.

Демо

12
задан Dimitri C. 8 March 2010 в 10:08
поделиться

6 ответов

Возможно, Firefox выдает несколько запросов одновременно, тогда как ваш код выполняет их один за другим. Возможно, добавление потоков ускорит вашу программу.

2
ответ дан 2 December 2019 в 02:59
поделиться

измените код на асинхронный getresponse

public override WebResponse GetResponse() {
    •••
    IAsyncResult asyncResult = BeginGetResponse(null, null);
    •••
    return EndGetResponse(asyncResult);
}

Async Get

4
ответ дан 2 December 2019 в 02:59
поделиться

Пробовали ли вы открыть тот же URL-адрес в IE на компьютере, на котором развернут ваш код? Если это компьютер с Windows Server, то иногда это происходит из-за того, что запрашиваемый URL-адрес отсутствует в списке безопасных сайтов IE (который HttpWebRequest не работает). Вам просто нужно его добавить.

У вас есть дополнительная информация, которую вы могли бы опубликовать? Я делал нечто подобное и раньше сталкивался с множеством проблем с HttpWebRequest. Все уникальное. Так что дополнительная информация поможет.

Кстати, вызов его с использованием асинхронных методов в этом случае не поможет. Это не сокращает время загрузки. Это просто не блокирует ваш вызывающий поток, вот и все.

0
ответ дан 2 December 2019 в 02:59
поделиться

Я заметил, что HttpWebRequest зависает при первом запросе. Я провел небольшое исследование, и, похоже, происходит то, что запрос настраивает или автоматически определяет прокси. Если вы установите

request.Proxy = null;

для объекта веб-запроса, вы сможете избежать начальной задержки.

С автоопределением прокси:

using (var response = (HttpWebResponse)request.GetResponse()) //6,956 ms
{
}

Без автоопределения прокси:

request.Proxy = null;
using (var response = (HttpWebResponse)request.GetResponse()) //154 ms
{
}
52
ответ дан 2 December 2019 в 02:59
поделиться

The answer is changing HttpWebRequest/HttpWebResponse to WebRequest/WebResponse only. That fixed the problem.

1
ответ дан 2 December 2019 в 02:59
поделиться

закройте поток ответов, когда вы закончите, поэтому в вашем checkExist () добавьте wresp.Close () после wresp = (HttpWebResponse) wreq.GetResponse ();

0
ответ дан 2 December 2019 в 02:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: