ページの読み込みが終了した後、ASP.NETページには、その処理の一部を行うことができますか?
-
19-09-2019 - |
質問
私はロードに時間がかかりすぎているASP.NETページを持っています。少しテストは、のサーバー側のロギングが時間の公正なチャンクを取っていることを示して、私は、ページが読み込まれた後までそれを延期したい(ユーザが、決してログの結果を確認する必要がないため)。
これを実行するための簡単な方法はありますか?
私は、ページのDisposed
イベントに置く試みたが、それは火とUnload
イベントでていないようですが、それはあまりにも早く起動します。私はむしろスレッドを生成する必要はないと思いますが、私はそれはそれは必要なものだ場合にできることがあります。
私はのNOTはのAJAXを探しています。私は少しより多くの処理を行う(クライアント側から見て)ページが読み込まれた後、通常の全ページのロードをしたいと。
解決
この仕事に表示されます:
protected void Page_Unload(object sender, EventArgs e)
{
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Close();
Thread.Sleep(20000); // Do processing here instead of sleeping :)
Debug.WriteLine("Done!");
}
あなたもすぐにUnloadイベント火災を述べたが、それはそれが適切な時期にありますように私には見えます。あなただけの接続を手動で閉じる必要があります。フラッシングは、私はあなたが閉じたときにフラッシュが暗黙的だと思ったとして、少し奇妙である、としても必須のようです。
それは次のHTTPリクエストを処理できない忙しい要求を扱うプロセスを続けると、、これにはいくつかの欠点があるかもしれません。 IIS7は、しかし、同時リクエストの数に設定可能な制限があります。あなたはシンプルたかった、私はこれはそれを取得するほど単純だと思います。
他のヒント
あなたはログに記録するメッセージのキューを取り、ちょうど自身のスレッドでログ記録を行い、ロギングサービスを作成すると考えていますか?
これを使用すると、あなたは彼らが前にコードにあった場所に発生するすべてのログを残して、ちょうどロギングメソッドへの非同期呼び出しを行うことができます。
あなたは非同期プロセスを探しています。 AJAXは、このだけでなく、他の実装が可能になります。非同期とASP.Netの検索を行うと、あなたは、リソースのトンを見つけることができます。
基本的にはあなたのウェブページには、キックオフとUIをレンダリングするために継続している間に、別のスレッドでプロセスを実行します。
あなたがログインする前に、応答ストリームにフラッシュを呼び出す試してみてください。アンロードは全体の応答が送信された後まで発生しません。あなたのフラッシュ()があり、その後、ログインすると、そのページが行う最後のものになるはずです。
の効果は、ユーザーがページを見ているが、ログが完了するまで、それはロードが完了していないことをする必要があります。しかし、彼らはページと対話することができますので、おそらく彼らは気にしません。
これは、非同期スレッドで可能です。 私たちは、更新がある場合は2分ごとにチェックし、顧客のためのページを作成したので、我々はページを更新します。
たぶん、このHOWTOはあなたを助けるます:
http://www.eggheadcafe.com/articles/20060918.aspする
希望はあなたを助けることができる。
の代わりにあなたのログにそれをログに記録するの、(のStringBuilderを使用して)それから列を作り、終わりに向かって、ログにその文字列全体を押します。
ページが例外によりロードに失敗した場合は、あなたは、ロギングを失う可能性がある。
私は問題を正しく理解していない場合は、失礼ます。
どのような種類のログのことであり、どこに行くのですか?
一つの方法は、別のスレッドをスピンオフ(あなたがasp.netで使用可能なスレッドの量を増加させる必要があるだろう)、そこにロギングを実行することであってもよいです。あなたはParameterizedThreadStartを使用して、ロギングに使用するオブジェクトを渡すことができます。 (ただし、それは悪いことだデータベースの接続/コマンドオブジェクトを渡さないでください!)