나는 그것을 간단하게 만들 것이다. 나는 stringwriter를 클래스 멤버로 사용하므로 using()을 사용할 수 없다. 나는 빈 함수를 호출 할 때마다 빈 sw 싶어요. 내가 해야하는 Dispose() 그 sw 및 새 개체를 할당? 또는 .close()와 같은 작업을 수행하고 버퍼를 비우려면 다른 작업을해야합니까?문자열 작성자를 처분해야합니까? 어떻게 든 재사용 할 수 있습니까?
답변
매번 빈 StringWriter가 필요한 특정 함수가있는 경우 해당 함수에서 새 StringWriter를 만듭니 까?
원래 질문으로 돌아가서 .NET Reflector을 사용하여 StringWriter의 Dispose가 무엇인지 확인했습니다. 그것이하는 모든 것은 기본 클래스 '(TextWriter) Dispose로 되돌아 오는 것입니다. 아무 것도하지 않습니다.
당신이 정말로 드러내고있는 StringWriter를 "재사용"해야한다면, 필요할 때 새로운 인스턴스를 다시 만드는 것이 안전 할 것 같습니다 (디자인을 재고해야한다고 생각하기는하지만 말입니다). StringWriter를 클래스의 public 멤버로 노출).
다른 답변자에 동의합니다. 클래스 레벨 문자열 작성자가 실제로 갈 길이 있는지 확인하려면 디자인을 봐야합니다.
그러나, 나는
에 대한 점에 동의하지 않는다 "는 않는 모든 폐기 다시 기본 클래스 '(TextWriter에)로 호출입니다 -. 을 아무것도하지 않는 한"
유형을 사용하는 경우 유형이 Dispose
인 경우 명시 적으로 또는 "사용"으로 호출해야합니다.
이 경우 StringWriter.Dispose
은 아무 것도 수행하지 않는 TextWriter.Dispose
으로 전화를 걸지만 실제로는 "무시하는"것이 좋습니다.
상속 및 다형성의 전체적인 포인트는이 유형을 파생 유형에 대해 스왑 아웃 할 수 있다는 것입니다.
코드에서 오늘의 StringWriter
은 Dispose
에 대해 더 의미있는 구현을 할 수있는 내일의 EvenBetterStringWriter
으로 바뀔 수 있습니다.
Dispose
을 구현하고이를 사용하는 경우 수행이 끝나면 dispose를 호출해야합니다.
이 특정 구체화의 내부에 대한 특권있는 지식은 여러분이 이처럼 여러분의 디자인을 안내하게 할 때 위험합니다. StringWriter
클래스 작성자는 Dispose가 호출되도록 분명히 의미했거나 존재하지 않을 것입니다. 요컨대 오라일리의 C#에서
+1. 그래서 당신은 매번 새로운 문자열 작성자를 처리하고 작성해야한다고 제안합니까? 기존의 것을 비울 수있는 방법이 없습니까? (또는 아마도 이점이 없다) –
재사용 접근법의 문제점은 고려해야 할 다른 문제가 있다는 것입니다. 1MB 문자열을 작성한 후 2KB로 다시 사용하면 나머지 1022KB는 거기에서 자유가 없거나 가비지 콜렉션에 대해 알 수 있습니까? 이것은 단지 하나의 예입니다. 전반적으로 - 아마 매번 생성 경로를 따라 가면서 특정 성능 문제가있는 경우에만 걱정할 것입니다. –
"StringWriter 클래스의 작성자는 Dispose가 호출되도록 분명히 의미했거나 존재하지 않을 것입니다." - 음 ... 아니. StringWriter는보다 일반적인 TextWriter에서 파생되기 때문에 Dispose가 있습니다. – mrec
:
있다, 그러나, 폐기하지 않는 세 가지 시나리오 :
- ...
- ...
- 객체의 폐기 방법은 디자인에 의해 불필요하고, 그 객체를 폐기하는 프로그램 세 번째 범주는 다음과 같은 클래스가 포함
에 복잡성을 추가합니다 : 에 (웹 클라이언트, StringReader를, 문자열 작가 및 BackgroundWorker에를 System.ComponentModel). 이 유형은 필수 정리를 수행해야하는 진정한 필요성보다는 기본 클래스 인 의 일종으로 처분됩니다. 그러한 객체를 인스턴스화하고 하나의 메소드로 완전히 작업하는 경우 사용 블록에 배치하면 에 약간의 불편 함이 추가됩니다. 그러나 객체가 오래 지속되면 트랙은 더 이상 사용되지 않으므로 처리 할 수 없으므로 불필요한 복잡성이 추가됩니다 ( ). 이 경우 객체 처분을 무시하면됩니다.
tl; dr : 아니요, 처리 할 필요가 없습니다.
- 1. 여러 활동, 동일한 onCreateOptionsMenu, onOptionsItemSelected 및 onKeyDown. 어떻게 든 코드를 재사용 할 수 있습니까?
- 2. 기존 TCP-Server를 재사용 할 수 있습니까?
- 3. 어떻게 든 변수를 변경할 수 있습니까?
- 4. HttpWebRequest를 재사용 할 수 있습니까?
- 5. Wide div - 어떻게 든 스크롤 막대를 제거 할 수 있습니까?
- 6. 작업을 처분해야합니까?
- 7. 문자열 변환에이 int를 어떻게 할 수 있습니까?
- 8. 어떻게 문자열 [] T로 변환 할 수 있습니까?
- 9. MVC에서 WPF ViewModels을 재사용 할 수 있습니까?
- 10. nginx에서 어떻게 서버 구성을 재사용 할 수 있습니까?
- 11. Perl 스크립트에서 일부 기능을 어떻게 재사용 할 수 있습니까?
- 12. Jquery Basic Beginner 질문 : 어떻게 함수를 재사용 할 수 있습니까?
- 13. 프레임 워크 질문. 같은 템플릿을 어떻게 재사용 할 수 있습니까?
- 14. 어떻게 cellForRowAtIndexPath가 포맷터를 재사용 할 수 있습니까 (스크롤 기능 향상)?
- 15. 어떻게 원시 사용자의 암호를 장고에서 재사용 할 수 있습니까?
- 16. 어떻게 ListView에 대한 메소드를 재사용 할 수 있습니까?
- 17. 집에서 재사용 가능한 라이브러리 - dll이나 프로젝트로 재사용 할 수 있습니까?
- 18. JavaDoc에서 @param 설명을 재사용 할 수 있습니까?
- 19. UI 기능을 재사용 할 수 있습니까?
- 20. ViewFlipper에서 뷰를 재사용 할 수 있습니까?
- 21. binary_oarchive 인스턴스를 재사용 할 수 있습니까?
- 22. Guava의 AbstractExecutionThreadService를 재사용 할 수 있습니까?
- 23. iPhone 개발 인증서를 재사용 할 수 있습니까?
- 24. CakePHP 어디에서이 코드를 재사용 할 수 있습니까?
- 25. CryptVerifySignature() 해시 객체를 재사용 할 수 있습니까?
- 26. 서브 쿼리를 재사용 할 수 있습니까?
- 27. Cipher 객체를 재사용 할 수 있습니까?
- 28. 스크롤 뷰에서 UILabels을 재사용 할 수 있습니까?
- 29. 어떻게이 응용 프로그램을 재사용 할 수 있습니까?
- 30. UITableView 어떻게 든 unclickable되었다.
공개적이라고 말한 적은 없습니다. 그것은 콜백에 대한 필요와 내가 can not 문자열 쓰기에 전달하므로 회원입니다. –