2012-01-24 14 views
4

私はApplication_End上に配置されているプロジェクトで、一時的なデータベースを使用しています/早すぎると呼ばれています - db内のオブジェクトを編集すると、変更は正常に行われ、データベースは破棄され、インデックスにリダイレクトされるまでに、新しいdbが作成され、変更されていないオブジェクトが、起こりました。Application_Endが頻繁

セッションが終了したとき、または一定量のアイドル時間が経過した後でのみ、Application_Endが呼び出されますか?

アプリケーションを使用して実際に終了したときにApplication_Endが呼び出されるようにする方法を教えてもらえますか?

答えて

10

問題はApplication_Endは、私は私のWebプロジェクトのAppDomainがアンロードされたときに起こる

を拾い読みしていながら、頻繁に と呼ばれているように見えるということです。デバッグ中は、binフォルダ内のアセンブリを再コンパイルするたびに再生成されるたびにASP.NETがアプリケーションドメインをリサイクルするため、通常はプロジェクトを再コンパイルするたびに発生します。

IISにアプリケーションをデプロイすると、IISがアプリケーションをリサイクルすることを決定した場合にのみ、それが起こることはめったにありません。これは、異なる状況下で起こるかもしれない:非アクティブの一定期間、CPU /メモリのしきい値に達している、セッションは を終了またはアイドル一定の時間が経過したとき...

にのみ呼び出されてApplication_Endべきではありません?

いいえ、Application_Endは、ユーザーセッションとは関係ありません。アプリケーションドメインの終わりに呼び出されます。

私は実際にアプリケーションを使用し終わったときにApplication_End が呼び出されることを確実にする方法を教えていただけますか?

これはそのケースです。Application_Endは、アプリケーションドメインをアンロードする準備ができたら、ASP.NETランタイムによって呼び出されます。

だから、あなたが永続的なデータベースではなく、メモリ内のストレージを使用する必要があります起きてからこれを避けたい場合。メモリ内のストレージを使用している場合、アプリケーションの存続期間に縛られており、すでに気づいているように極端に短くなる可能性があります。

+0

私のデータベースは、オブジェクトの編集とインデックスへのリダイレクトの間に配置され、変更がないことを示しています。私が呼び出すすべてのアクションであると思われるものに処理されるデータベースを停止するために何か他のことを提案することはできますか? – DevDave

+2

@タイラー、私は永続的なデータベースを使用することをお勧めします。メモリ内のデータベースはユニットテストには最適ですが、実際のアプリケーションではまったく役に立たないものです。 –

関連する問題