asp.net では、どのようなマルチスレッドの問題に注意する必要がありますか?
6 に答える
ASP.NET ページのコード ビハインドからスレッドを生成するのは危険です。ワーカー プロセスがときどきリサイクルされ、スレッドが停止するからです。
Web ページでのユーザー アクションの結果として実行時間の長いプロセスを開始する必要がある場合は、MSMQ でメッセージを削除し、別のバックグラウンド サービスでキューを監視することをお勧めします。サービスがタスクを完了するのに必要なだけ時間がかかる可能性があり、Web ページの作業はほぼ即座に終了します。Web メソッドへの非同期呼び出しで同じことを達成できますが、Web メソッドの動作が終了したときに応答を取得することに依存しないでください。コード ビハインドから、迅速なファイア アンド フォーゲットが必要です。
有効期限が切れるもので注意すべきことの 1 つ (httpContext はそうだと思います)。「ファイア アンド フォーゲット」の操作に使用している場合は、操作が完了する前に asp.net クリーンアップ コードが突然実行された場合に注意してください。 、特定の情報にアクセスできなくなります。
これがWebサービスの場合は、スレッドプールを検討する必要があります。スレッドが多すぎると、最終的にCPU時間の競合が開始されるため、アプリケーションが停止します。
これはファイルまたはネットワークIO用ですか?その場合は、非同期IOの使用も検討する必要があります。プログラムするのは少し面倒かもしれませんが、一度に多くのスレッドを生成することを心配する必要はありません。
IIS構成には合計25スレッドの制限がありませんか?少なくともIIS6では私は信じています。その制限を超えると、興味深いことが起こる可能性があります(読み取り:loooooooong応答時間)。
必要なものに応じて、マルチスレッドに関する限り、クライアントからのリクエストを生成することを考えましたか? AJAX を使用してリクエストを生成し、コールバックで結果に基づいて操作することは安全です。または、サービスをバックグラウンド メカニズムとして使用します。これは、X 分ごとに実行され、そのようにバックグラウンドで処理されます。
Programmatic Caching は、すぐに頭に浮かぶ分野の 1 つです。慎重に使用する必要がある優れた機能です。リクエスト間で共有されるため、更新する前にロックを設定する必要があります。
私がチェックするもう1つの場所は、ログファイルへの書き込みなど、ファイルシステムにアクセスするコードです。1 つの要求がファイルに対して読み取り/書き込みロックを持っている場合、他の同時要求は適切に処理されないとエラーになります。