2017-02-20 11 views
1

나는 IDisposable 클래스 A를가집니다. 클래스 B의 다른 메서드 M 내부에서 A 개체를 사용해야합니다. 메서드 M은 여러 번 호출됩니다 (하루에 백만 번). 내가 M 내부의 A의 로컬 객체를 사용하고 한 번 완료하면 처리해야합니까, 아니면 클래스 레벨 정적 멤버를 B 내부에 선언하고 애플리케이션이 끝나면 처리해야합니까? 명확하지 않은 경우 알려주십시오.전체 응용 프로그램 수명을위한 하나의 개체 또는 호출 당 하나의 개체 + dispose

+0

왜 B가 A 생성자에서 A 인스턴스를 가져 와서 필요에 따라 M에 공급할 수 없는데 B가 완료되면 B를 삭제할 수없는 이유는 무엇입니까? public 인터페이스를 개입시켜 제공되는 자원의 클린 업은, 그 인터페이스가 팩토리 메소드 또는 생성자의 경우는 호출 해 옆이 책임 져야합니다. – hoodaticus

+0

M에 대한 각 호출은 B의 새 인스턴스를 통해 이루어집니다. –

+1

스레드 안전하다고 가정 할 때 여기서는 싱글 톤과 같은 사운드가 적절합니다. – hoodaticus

답변

1

응용 프로그램의 수명 동안 하나의 개체는 싱글 톤입니다. 특정 상황에서 유용하지만 일반적으로 좋은 아이디어는 아닙니다. 이유에 대한 자세한 설명은 this question을 참조하십시오.

IDisposable을 구현하는 클래스는 처분을 처리하는 using 문 내에서 가장 잘 사용됩니다.

일회용 클래스에 대한 여러 건의 호출이 단일 비즈니스 액션의 컨텍스트에서 필요하며 해당 작업이 너무 확산되어 using 문에 래핑되지 않는 경우는 예외입니다. 이 경우 모든 호출을 전용 멤버로 첫 번째가있는 두 번째 일회용 클래스로 래핑합니다. 두 번째 클래스가 처분 될 때는 일회용 개인 회원을 처분해야합니다.

+0

B의 여러 인스턴스에서 발생하는 클래스 B의 메서드 M을 호출합니다. 아래처럼 B b = new B() b.M() B는 일회용으로 만들 수 있습니다. –

+0

'IDisposable'을 구현 한 클래스가 응용 프로그램의 수명 동안 보유되어야하고'using' 내부에서 사용되지 않는 또 다른 명확하지 않은 경우는'HttpClient'입니다. 자세한 내용은 [여기] (https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/)에서 확인할 수 있습니다. –

+0

@BradleyUffner는 내 마음에 가장 저명한 예가되어 절대적으로 말하지 않게했습니다. –