Благодарю Алекса Бурцева

я есть веб-страница, на которой нет ничего, кроме некоторых строк. Никаких изображений, никакого цвета фона или чего-то еще, просто какой-нибудь простой текст, который на самом деле не такой длинный.

Мне просто интересно, каков наилучший (под этим я подразумеваю самый быстрый и самый эффективный) способ передачи строки на веб-странице, чтобы я мог использовать ее для чего-то другого (например, для отображения в текстовом поле)? Я знаю о WebClient, но я не уверен, что он будет делать то, что я хочу, и, к тому же, я не хочу даже пробовать это, даже если он работал, потому что в прошлый раз, когда я делал это, это заняло примерно 30 секунд для простая операция.

Любые идеи были бы хорошы.

 Rob21 янв. 2011 г., 12:37
Мимоходом разбираешься? если да, то с какой технологией вы его анализируете? то есть что за текстовое поле win-формы, другой сайт?
 Jimmy21 янв. 2011 г., 12:32
Класс WebClient является естественным выбором здесь. Работа веб-клиента не должна занимать 30 секунд (при условии отсутствия других проблем с сетью).
 Darin Dimitrov21 янв. 2011 г., 12:34
Ваш выбор ограничен WebClient или WebRequest / WebResponse (это то, что WebClient использует в сценах, так что просто перейдите на WebClient). Что касается того, почему это медленно, то это не имеет ничего общего с реализацией стека .NET HTTP. Это могут быть проблемы с сетью, плохая реализация веб-сайта, который вы пытаетесь получить, что замедляет возврат ответа ... Например, запуск веб-клиента на правильно написанном веб-сайте, таком какgoogle.com получение ответа занимает несколько миллисекунд, что намного меньше, чем 30-е годы, которые вы наблюдаете на своем сайте.

Ответы на вопрос(4)

 WebClient client = new WebClient();
            using (Stream data = client.OpenRead(Text))
            {
                using (StreamReader reader = new StreamReader(data))
                {
                    string content = reader.ReadToEnd();
                    string pattern = @"((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)";
                    MatchCollection matches = Regex.Matches(content,pattern);
                    List<string> urls = new List<string>();
                    foreach (Match match in matches)
                    {
                            urls.Add(match.Value);
                    }

              }

System.Net.WebClient неоправданно медленноПопробуйте установить Proxy = null;

WebClient wc = new WebClient (); wc.Proxy = null;

Благодарю Алекса Бурцева

Чтение данных с веб-сайта с использование

возможно, это проблема сети или проблема на веб-сервере. Попробуйте открыть ресурс в браузере и посмотрите, сколько времени это займет. Если веб-страница очень большая, вы можете захотеть смотреть ее в потоковом режиме, а не читать до конца, как в этом примере. смотреть на

        WebClient web = new WebClient();
        System.IO.Stream stream = web.OpenRead("http://www.yoursite.com/resource.txt");
        using (System.IO.StreamReader reader = new System.IO.StreamReader(stream))
        {
            String text = reader.ReadToEnd();
        }

http://msdn.microsoft.com/en-us/library/system.io.stream.read.aspx чтобы увидеть, как читать из потока.По поводу предложения Итак, я бы предложил вам использовать WebClient и изучить причины 30-секундной задержки.

Решение Вопроса

вами функции, например:

System.Net.WebClient wc = new System.Net.WebClient();
byte[] raw = wc.DownloadData("http://www.yoursite.com/resource/file.htm");

string webData = System.Text.Encoding.UTF8.GetString(raw);

или (в дополнение к предложению Фредрика в комментариях)

System.Net.WebClient wc = new System.Net.WebClient();
string webData = wc.DownloadString("http://www.yoursite.com/resource/file.htm");

Когда вы говорите, что это заняло 30 секунд, можете ли вы рассказать об этом немного больше? Есть много причин, почему это могло произойти. Медленные серверы, интернет-соединения, хитрая реализация и т. Д. И т. Д.

Вы можете пойти на уровень ниже и реализовать что-то вроде этого:

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://www.yoursite.com/resource/file.htm");

using (StreamWriter streamWriter = new StreamWriter(webRequest.GetRequestStream(), Encoding.UTF8))
{
    streamWriter.Write(requestData);
}

string responseData = string.Empty;
HttpWebResponse httpResponse = (HttpWebResponse)webRequest.GetResponse();
using (StreamReader responseReader = new StreamReader(httpResponse.GetResponseStream()))
{
    responseData = responseReader.ReadToEnd();
}

Тем не менее, в конце концов, класс WebClient завершает эту функцию для вас. Поэтому я хотел бы предложить вам использовать WebClient и исследовать причины 30-секундной задержки.

 MrEyes21 янв. 2011 г., 12:42
Кстати, страница загружается быстрее при просмотре в браузере? Кроме того, безопасна ли веб-страница - в этом случае проверка сертификатов может занять около 40 секунд, если ваш компьютер не может связаться с корневым сертификатом. По моему опыту, неправильная настройка DNS часто может привести к медленной реакции сети.
 Fredrik Mörk21 янв. 2011 г., 12:40
В качестве альтернативы используйтеDownloadString метод и избавиться от обработки байтового массива:string result = wc.DownloadString(...
 Jimmy21 янв. 2011 г., 12:44
@Iceyoshi: сколько данных вы скачивали? Пара КБ или пара МБ? Также вы уверены, что задержка была при вызове WebClient, а не при последующем разборе / замене?
 MrEyes21 янв. 2011 г., 12:46
Если вы загружаете текст, я бы порекомендовал использовать WebClient и получить потоковый ридер к тексту:
 Iceyoshi21 янв. 2011 г., 12:41
Я запрограммировал кнопку, которая сохранит страницу (пусть и ту, которая имеет довольно мало трафика) с помощью класса WebClient, а затем заменит некоторое содержимое в файле некоторым содержимым страницы. С помощью секундомера я рассчитал, сколько времени это заняло, и оно варьировалось от 10 до 40 секунд. Интернет-соединение могло быть плохим, но я сомневаюсь, что это было главной причиной. К сожалению, у меня больше нет кода для этой кнопки, иначе я бы его опубликовал. : \ @Fredrik: +1 для предложения DownloadString

Ваш ответ на вопрос