ASP.NET에서 항목이 IDisposable 구현 세션 상태로 남아 있지만 세션이 만료 될 때 응용 프로그램에서 명확하게 제거되고 삭제되지 않으면 항목에 Dispose가 호출됩니다.)가 실행됩니까?IDisposable을 구현하는 항목을 포함하는 세션
답변
IDisposable
패턴이 implemented properly 인 경우 예 (즉, 클래스의 소멸자가 객체 처분을 처리 함)입니다. ASP.NET 세션 관리자가 Dispose()
을 IDisposable
구현 클래스에 명시 적으로 호출하는 것에 대한 보증을한다고는 생각하지 않습니다.
Mark의 공격적인 반대에도 불구하고 finalizer를 "일상적으로"제안하지는 않습니다. 단순히 이이고, 세션이 만료 될 때 객체에 대한 Dispose
메서드를 호출하면이 옵션을 사용할 수 있습니다.
파이널 라이저는 정확한 IDisposable 구현이 아닙니다. 오히려 파이널 라이저가있는 것도 IDisposable 일 수 있습니다. 그러나 IDisposable 개체는 IDisposable이기 때문에 finalizer가 없어야합니다. –
나는 이것이 "공격적"이라고 생각하지 않았습니다. 단순히 IDisposable이 "올바르게 구현되었는지 여부"와는 아무런 관련이 없습니다. –
내 대답에 부정적인 의견을 남기고 내 대답을 잘못 설명하고 자신의 대답을 작성한다고 말하고 싶습니다. 귀하의 불일치를 반복하는 것은 '공격적인 반대'의 자격을 갖습니다. 그 중 어느 하나라도 충분할 것입니다. 나는 우리가 이것에 대해서도 동의하지 않을 것이라고 생각한다. –
나는 Sean의 대답에 동의하지 않는다. 첫째, finalizer는 IDisposable
임에도 불구하고 이 아닌이 일상적으로 클래스에 추가되어야합니다. finalizer는 관리되지 않는 리소스를 나타내는 클래스에서만 사용해야합니다. 반대로 finalizer가있는 클래스는 종종 IDisposable
입니다.
다시 질문 : Dispose()
- 아니, 그렇지 않습니다. 개체는 미래의 어떤 시점에서 가비지 수집됩니다 (불확정). 파이널 라이저는 여기에 많이 추가하지 않을 것입니다. 캡슐화 된 오브젝트는 이미 콜렉션 대상이됩니다 (다른 곳에서 참조되지 않는다고 가정).
나는 세션에서 일회용 개체를 사용하고 싶습니다. 거의 확실하게 확장 성 문제가 발생할 것입니다. Disposable 인 것은 제한된 리소스에 연결되어있을 가능성이 높습니다. 활성 리소스가 많으면 활성 리소스를 많이 사용할 수 있습니다. 둘째로 많은 사람들 (대부분?) 일회용 객체는 웹 팜에서 묶여있는 리소스가 단일 시스템에 로컬 일 가능성이 높고 동일한 직렬화 된 다른 시스템에서 직렬화 및 비 직렬화 될 것이므로 잘 작동하지 않을 것으로 예상됩니다. 상태.
이 질문에 대한 답변 http://stackoverflow.com/q/12347044/11683 – GSerg