Winform приложение первый веб-запрос медленный - PullRequest
3 голосов
/ 28 ноября 2011

Когда я впервые создаю запрос HttpWebRequest в приложении Winform, обработка первого запроса занимает от 10 до 30 секунд.Последующие звонки занимают меньше секунды.Я написал небольшое POC-приложение, чтобы проиллюстрировать это, оно состоит из двух кнопок и 2 текстовых полей, изображение приложения можно найти здесь (я пока не могу загрузить изображения здесь) ...*

Код приложения очень прост:

public partial class Form1 : Form
{
    DateTime _start;
    TimeSpan _span;
    int _count = 0;
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
        _count++;
        _start = DateTime.Now;
        HttpWebRequest _request = (HttpWebRequest)WebRequest.Create(textBox1.Text); ;
        // Added after Conrad's response:
        _request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
        HttpWebResponse _response = (HttpWebResponse)_request.GetResponse(); 
        _response.Close();
        _span = DateTime.Now - _start;
        textBox2.Text += _count.ToString("000") + ": " + _span.ToString(@"mm\:ss\,fff") + "\r\n";
    }

    private void button2_Click(object sender, EventArgs e)
    {
        textBox2.Text = "";
    }
}

Почему в первом запросе так много времени?Есть что-то, что я могу сделать, чтобы ускорить это?

Ответы [ 4 ]

5 голосов
/ 07 октября 2012

Если вы установите для свойства proxy значение null, оно будет работать и без отключения логических карт.

Источник: HttpWebRequest запускается медленно в первый раз в SQLCLR

2 голосов
/ 29 ноября 2011

Тайна раскрыта, спасибо всем ребятам за намеки. Используя Fiddler2 (большое спасибо, Брэдли & Джейсон !), Я смог определить, что проблема была на моем ноутбуке. У меня есть один адаптер MS-Loopback и один адаптер VirtualBox, который я использую для тестов с КПК и виртуальными машинами. Когда один или оба включены, приложению потребовалось слишком много времени, чтобы определить шлюз для подключения. Когда я отключил обе логические карты, отставание исчезло.

Я все еще думаю, что с приложением WinForm / .Net что-то странное, потому что мои браузеры (IE / FF) не страдают от этой проблемы. Может быть, есть способ настроить .NET или мое приложение, чтобы игнорировать эти адаптеры, но так как я почти полный веб-обозреватель (веб-неосведомленный), я счастлив найти это решение.

1 голос
/ 28 ноября 2011

Ну, есть несколько разных нововведений, но в основном есть достаточно настроек для вашего первого хита.Вы могли бы вертеться по краям, но ценность, которую вы получите от усилий, сомнительна.Это, конечно, не будет 29 секунд ...

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

0 голосов
/ 29 ноября 2011

Это похоже на настройку IIS на вашем веб-сервисе. Попробуйте автозапуск , чтобы уменьшить задержку первого запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...