使用REST服务 - 第一次跟随呼叫需要更长的时间

时间:2012-07-26 07:48:10

标签: c# .net rest .net-3.5

我使用REST服务,需要通过以下方式进行Bacis身份验证:

private void button1_Click(object sender, EventArgs e) {
    try {
        var url = "http://172.34.1.111:8088/ustrich/rest/projects/pid/1234";
        using (var wc = this.CreateWebClient(url)) {
            var stopWatch = new Stopwatch();
            stopWatch.Start();
            var s = wc.DownloadString(url);
            stopWatch.Stop();
            this.label1.Text = stopWatch.Elapsed.ToString();
            this.textBox1.Text = s;
        }
    } catch (Exception ex) {
        this.textBox1.Text = ex.ToString();
    }
}

protected WebClient CreateWebClient(string url) {
    var webClient = new WebClient();
    var cache = new CredentialCache { { new Uri(url), "Basic", new NetworkCredential("rest", "rest") } };
    webClient.Credentials = cache;
    webClient.Headers.Add("Content-Type", "text/xml; charset=utf-8");
    webClient.Encoding = Encoding.UTF8;
    return webClient;
}

问题是,当我启动我的Test-Application并执行此代码时,第一次在wc.DownloadString(url)上花费大约5秒钟。跟随调用,当我点击按钮上的第二个等时间时,它只需要300ms。 现在我的问题是:我的代码中有什么问题吗?我可以优化那里的东西来解决第一次通话需要5秒钟的问题吗? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

第一次点击代码时,它会被预编译。这次总是很慢。我相信你可以在构建代码时使用MSBUILD执行此操作,但这只是将时间转移到流程的不同部分。在生产中,这只会在每次工作进程重新启动时发生。