2012-01-24 2 views
4

내가 Application_End에 배치되는 프로젝트에 임시 데이터베이스를 사용하고/너무 일찍 호출되는 - db에서 객체를 편집 할 때 변경 작업이 성공적으로 완료되고 데이터베이스가 삭제 된 다음 색인으로 리다이렉트 될 때까지 새 db가 작성되어 변경되지 않은 객체가없는 것처럼 보입니다. 일어난.Application_End 자주

세션이 종료되거나 특정 유휴 시간이 지나면 Application_End 만 호출하면 안됩니까?

누군가 응용 프로그램 사용을 실제로 마쳤을 때 Application_End가 호출되도록하는 방법을 알려줄 수 있습니까?

답변

10

문제는 Application_End가 내 웹 프로젝트 응용 프로그램 도메인이 언로드 될 때 발생하는

을 탐색하고 동안 자주 를 호출 할 것으로 보인다는 것이다. 디버깅하는 동안 bin 폴더의 어셈블리를 다시 컴파일 할 때마다 다시 생성되고 ASP.NET이 단순히 응용 프로그램 도메인을 재활용하기 때문에 정상적으로 프로젝트를 다시 컴파일 할 때마다 문제가 발생합니다.

IIS에 응용 프로그램을 배포하면 IIS가 응용 프로그램을 재활용하기로 결정할 때만 드물게 발생합니다. 그것은 서로 다른 상황에서 발생할 수 : 비활성, CPU/메모리 임계 값의 일정 기간을, 도달 ...

세션이 를 종료하거나 유휴 일정한 시간이 지나면 때

이 Application_End에만 호출되지해야 ?

아니요, Application_End은 사용자 세션과 아무 관련이 없습니다. 응용 프로그램 도메인의 수명이 다할 때 호출됩니다.

아무에게 말해도 응용 프로그램 사용을 실제로 마치면 Application_End 만 호출 할 수 있습니다.

응용 프로그램 도메인을 언로드 할 준비가되었을 때 Application_End이 ASP.NET 런타임에 의해 호출됩니다.

그래서 이런 일이 발생하지 않도록하려면 메모리가 아닌 영구 데이터베이스를 사용해야합니다. 메모리 내 스토리지를 사용하는 경우 이미 알고있는 것처럼 애플리케이션의 수명이 매우 짧을 수 있습니다.

+0

디버그 모드가 아닐지라도 데이터베이스는 개체 편집과 인덱스로 리디렉션되는 사이에 배치되므로 변경 사항이 표시되지 않습니다. 내가하는 모든 행동 인 것처럼 보이는 것에 처분되는 데이터베이스를 막기 위해 할 수있는 다른 것을 제안 할 수 있습니까? – DevDave

+2

@Tyler, 영구 데이터베이스를 사용하는 것이 좋습니다. 인 메모리 데이터베이스는 단위 테스트에 적합하지만 실제 애플리케이션에서는 전혀 쓸모가 없습니다. –