1

asp.netアプリがあり、アプリケーション開始関数で呼び出されるタスクがいくつかあります。これらのタスクは実行さwhile(true) れ、計算が完了した後、x時間スリープします。ただし、アプリをデプロイした後、これらのタスクによって生成されたログファイルを調べたところ、必要以上に実行されていることがわかりました。

実際、これらは、しばらく操作を行わなかった後、誰かがサイトにアクセスするたびに実行されます。

アプリケーションプールの設定を調べたところ、プロセスモデルのアイドルタイムアウトが20分に設定されていることがわかりました。

これが問題の原因である可能性がありますか?つまり、アプリケーションは非常に20分後に再起動されるため、application_start関数が再度呼び出されますか?

4

1 に答える 1

1

これが問題の原因である可能性がありますか?

はい、正確に。この設定は、サイトで一定時間アクティビティがない(HTTP要求がない)場合、IISは単にアプリケーションドメインをメモリからアンロードすることを意味します。次に、入ってくる次のリクエストは、アプリケーションの新しいインスタンスを開始し、Application_Startがもう一度ヒットします。

IISがアプリケーションをアンロードする可能性があるのは、これだけではないことに注意してください。これは、たとえば、プロセスがCPUまたはメモリ使用量の特定のしきい値に達した場合にも発生する可能性があります。それらも構成可能です。

binまた、フォルダ内の一部のファイルが変更された場合、web.configまたはまたはGlobal.asaxも変更された場合にも再起動します。ただし、今回はアプリケーションをアンロードするのはIISではなく、これらのファイルの変更をリッスンするのはASP.NETランタイムです。ただし、すべての場合においてApplication_Start、次のリクエストでトリガーされることになります。

于 2012-05-25T06:07:22.337 に答える