0

我创建了一个网页来接收来自第三方的一些数据我的代码如下

    static StreamReader sr;
    string data = string.Empty;
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (Request.QueryString["Name"] != null)
            {
                data = Request.QueryString["Name"].ToString();
                ProcessData(data);
            }
            else if (Page.Request.InputStream.Length > 0)
            {
                sr = new StreamReader(Page.Request.InputStream);
                data = Server.UrlDecode(sr.ReadToEnd());
                sr.Close();
                ProcessData(data);
            }
        }
        catch (Exception ex)
        {
            Logger(ex.ToString() + " StackTrace: " + Convert.ToString(ex.StackTrace));
        }
    }

我需要在 1000 毫秒内获取发布的数据和响应。但有时超过 3 秒,有时不到 1 秒。请问有什么机会。我怎样才能减少这个时间。请有人帮忙...

4

1 回答 1

0

我们在谈论多少数据?这会有很大的不同。

低于一定数量,您读取单个字符串的方法性能更高,但是,超过几千字节,您通常会通过重写 ProcessData 获得更好的性能,以便它有一个需要 aTextReader并传递sr给它的重载- 它可以自己处理 url-unescaping,也可以使用您传递sr给的直通阅读器进行处理,并且在读取时执行 url-unescaping。

门槛在哪里,很难说。在决定选择哪一个时,我会平衡数据大小与采用这种方法的难度。对于任何可以轻松适应的东西(任何在一次传递中进行解释、写入另一个流、存储在数据库中、传递到一个XmlReader将非常容易的情况)我会为超过 2- 4kiB 甚至更少(这个XmlReader例子很简单,即使是微小的数据我也很可能这样做)。当事情变得更加困难时,我会抵制它,直到我们谈论几百 kiB 或者我真的很关心性能。

可以推迟任何处理吗?如果是这样,您可以将该工作传递给另一个线程,并更快地发送响应。

于 2012-08-24T10:34:26.747 回答