0

サードパーティから投稿されたデータを受け取るための Web ページを作成しました 私のコードは次のとおりです

    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を書き換えることでパフォーマンスが向上するため、過負荷がかかり、TextReaderそれに渡さsrれます。 -url-unscaping自体を処理することも、パススルーリーダーを使用して処理することもできます。パススルーリーダーは、sr読み取り元でurl-unescapingを実行します。

しきい値がどこにあるかは、言うのが難しいです。どちらを選択するかを決める際には、データサイズとこのアプローチの難しさのバランスを取ります。簡単に適応できるものなら何でも(シングルパスでの解釈、別のストリームへの書き込み、データベースへの保存、パスへのパスは、XmlReaderこれが本当に簡単な場合です)2を超えるものなら何でもできます。 4kiB以下かもしれません(このXmlReader例は非常に簡単なので、微細なデータでもこれを実行できる可能性があります)。物事がさらに困難になると、数百kiBについて話すか、パフォーマンスを本当に気にするまで、私はそれに抵抗します。

処理を延期することはできますか?もしそうなら、あなたはその仕事を別のスレッドに渡し、より速く応答を送ることができます。

于 2012-08-24T10:34:26.747 に答える