2009-12-02 3 views
0

내 응용 프로그램에 정적 클래스가 있습니다. 응용 프로그램을 실행할 때 디버깅을 중지하고 다시 시작하면 이러한 변수가 메모리에 남아 있음을 알 수 있습니다! 따라서 응용 프로그램이 종료되면 응용 프로그램이 종료되고 응용 프로그램의 다음 인스턴스에 다시 연결됩니다. 예상대로 정말 미친 결과가납니다.응용 프로그램을 중지하면 ASP.NET 정적 변수가 유지됩니다!

응용 프로그램이 종료 될 때 정적 변수가 프로그램 자체에서 삭제되도록 말할 수 있습니까?

답변

7

정적 변수는 정적 변수가 포함 된 AppDomain이 활성 상태로 유지되는 한 계속 유지됩니다. 디버깅 세션 간에도 문제가 없다면 디버깅을 중단해도 앱 실행이 중지되지 않습니다. 두 번 모두 동일한 인스턴스입니다. 웹 서버를 다시 시작하십시오.

정적 변수가 지속되는 경향이있는 경우 미친 결과가 발생하는 경우 해당 변수를 올바르게 사용하지 않아서 정적 변수를 전혀 사용하지 않아야 함을 추가합니다.

+0

ASP.NET에서 정적 변수를 전혀 쓸모 없게 만들지 않습니까? 나는 사람들이 코드에서 "정적"이라는 단어를 사용했기 때문에 누가 웹 서버를 시작/중지 할 코드를 작성하겠습니까? – Petras

+1

그게 당신이 그들을 사용하는 따라 달라집니다. 그것들은 유용 할 수 있지만 테스트를 어렵게 만들고, 읽기 전용 변수가 아닌 경우 수동으로 잠금을 관리해야합니다. 그러면로드가 내려지면 용융물을 피할 수 있습니다. 응용 프로그램 상태에서 값을 저장하는 것이 더 좋습니다. Application [ "foo"] = value; ' –

+0

Application 객체는 또 다른 정적 변수입니다. 또한 잠금을 관리하는 몇 가지 방법이 있지만 기본적으로 다른 정적 변수와 다르게 동작하지는 않습니다. – RickNZ

1

디버거를 중지해도 IIS 또는 Cassini가 중지되지 않습니다.

카시니를 사용하는 경우 명령 트레이에서 명시 적으로 중지해야 재활용 할 수 있습니다.

그렇지 않으면 web.config를 수정하여 강제로 재활용 할 수 있습니다.

나는 이것에 관한 버그를 Connect에 한 번 제기했다. 마이크로 소프트는 "의도적으로"라고 말했다.

관련 문제