需要尽可能快地获取发布数据

时间:2012-08-24 10:09:59

标签: c#

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

    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 个答案:

答案 0 :(得分:0)

我们谈论了多少数据?这将产生重大影响。

低于一定数量,您在单个字符串中读取的方法性能更高,但是,超过几千字节,您通常会通过重写ProcessData获得更好的性能,以便它具有一个带有{的重载{1}}并将TextReader传递给它 - 它既可以处理url-unescaping本身,也可以使用传递读取器来传递sr并执行url-unescaping,因为它是读物。

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

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