2009-01-31 2 views
7

ASP.NET에서 항목이 IDisposable 구현 세션 상태로 남아 있지만 세션이 만료 될 때 응용 프로그램에서 명확하게 제거되고 삭제되지 않으면 항목에 Dispose가 호출됩니다.)가 실행됩니까?IDisposable을 구현하는 항목을 포함하는 세션

+0

이 질문에 대한 답변 http://stackoverflow.com/q/12347044/11683 – GSerg

답변

2

IDisposable 패턴이 implemented properly 인 경우 예 (즉, 클래스의 소멸자가 객체 처분을 처리 함)입니다. ASP.NET 세션 관리자가 Dispose()IDisposable 구현 클래스에 명시 적으로 호출하는 것에 대한 보증을한다고는 생각하지 않습니다.

Mark의 공격적인 반대에도 불구하고 finalizer를 "일상적으로"제안하지는 않습니다. 단순히 이고, 세션이 만료 될 때 객체에 대한 Dispose 메서드를 호출하면이 옵션을 사용할 수 있습니다.

+2

파이널 라이저는 정확한 IDisposable 구현이 아닙니다. 오히려 파이널 라이저가있는 것도 IDisposable 일 수 있습니다. 그러나 IDisposable 개체는 IDisposable이기 때문에 finalizer가 없어야합니다. –

+0

나는 이것이 "공격적"이라고 생각하지 않았습니다. 단순히 IDisposable이 "올바르게 구현되었는지 여부"와는 아무런 관련이 없습니다. –

+0

내 대답에 부정적인 의견을 남기고 내 대답을 잘못 설명하고 자신의 대답을 작성한다고 말하고 싶습니다. 귀하의 불일치를 반복하는 것은 '공격적인 반대'의 자격을 갖습니다. 그 중 어느 하나라도 충분할 것입니다. 나는 우리가 이것에 대해서도 동의하지 않을 것이라고 생각한다. –

10

나는 Sean의 대답에 동의하지 않는다. 첫째, finalizer는 IDisposable 임에도 불구하고 이 아닌이 일상적으로 클래스에 추가되어야합니다. finalizer는 관리되지 않는 리소스를 나타내는 클래스에서만 사용해야합니다. 반대로 finalizer가있는 클래스는 종종 IDisposable입니다.

다시 질문 : Dispose() - 아니, 그렇지 않습니다. 개체는 미래의 어떤 시점에서 가비지 수집됩니다 (불확정). 파이널 라이저는 여기에 많이 추가하지 않을 것입니다. 캡슐화 된 오브젝트는 이미 콜렉션 대상이됩니다 (다른 곳에서 참조되지 않는다고 가정).

1

나는 세션에서 일회용 개체를 사용하고 싶습니다. 거의 확실하게 확장 성 문제가 발생할 것입니다. Disposable 인 것은 제한된 리소스에 연결되어있을 가능성이 높습니다. 활성 리소스가 많으면 활성 리소스를 많이 사용할 수 있습니다. 둘째로 많은 사람들 (대부분?) 일회용 객체는 웹 팜에서 묶여있는 리소스가 단일 시스템에 로컬 일 가능성이 높고 동일한 직렬화 된 다른 시스템에서 직렬화 및 비 직렬화 될 것이므로 잘 작동하지 않을 것으로 예상됩니다. 상태.

관련 문제