我创建了一个网页来接收从第三方发布的一些数据 我的代码如下
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秒,有时不到一秒钟。 请告诉我们有什么机会。我怎样才能减少这段时间。 请有人帮忙......
答案 0 :(得分:0)
我们谈论了多少数据?这将产生重大影响。
低于一定数量,您在单个字符串中读取的方法性能更高,但是,超过几千字节,您通常会通过重写ProcessData获得更好的性能,以便它具有一个带有{的重载{1}}并将TextReader
传递给它 - 它既可以处理url-unescaping本身,也可以使用传递读取器来传递sr
并执行url-unescaping,因为它是读物。
就在门槛的地方,很难说。在决定采用哪种方法时,我会平衡数据大小与采用这种方法的难度。对于任何可以轻松调整的东西(任何在一次传递中进行解释,写入另一个流,在数据库中存储,传递给sr
的情况,这将是非常简单的情况)我会这样做对于任何超过2-4kiB或甚至更少的东西(XmlReader
示例将是如此容易,即使对于微小的数据我也很可能这样做)。当事情变得更加困难时,我会抵制它,直到我们谈论几百kiB或我非常关心性能。
可以推迟任何处理吗?如果是这样,您可以将该工作传递给另一个线程,并更快地发送响应。