.NET 3.5에서 WeakReference는 String과 함께 작동합니까? 아니면 작은 "클래스"로 묶어서 작동시켜야합니까?WeakReference는 String에서 작동합니까?
답변
System.String
(C#의 string
)은 참조 유형이므로 WeakReference
과 완벽하게 일치하지 않아야하는 이유는 없습니다. 어떤 점에서는 특별한 참조 유형이라는 사실을 무시하십시오 (처음에는 변경할 수 없음). CLR은 이것을 참조 유형으로 간주합니다.
이렇게 말하면 this other StackOverflow thread은 많은 상황에서 문자열 참조가 '인턴 될'수 있다는 점을 잘 보여주기 때문에 가비지 수집과 관련하여 "예상되는"동작은 관찰되지 않습니다.
System.String은 단순한 참조 형식이므로 아무 문제없이 WeakReference와 함께 확실히 작동합니다. WeakReference의 "일반적인"사용에 적합하지 않으므로 WeakReference 사용에 대한 사용 사례를 보는 것이 흥미로울 것입니다. MSDN Guidelines에서
:
를 사용하여 긴 약한 참조하는 경우에만 오브젝트의 상태가 종결 후 예측할 필요.
작은 개체에 약한 참조를 사용하지 마십시오. 포인터 자체가 커서 크기가 클 수도 있고 커질 수도 있습니다.
메모리 관리 문제에 대한 자동 해결 방법으로 약한 참조를 사용하지 마십시오. 대신 응용 프로그램의 객체를 처리하기위한 효과적인 캐싱 정책을 개발하십시오.
저는 많은 문자열을 가지고 있습니다. 일반적으로 DB에 저장되어 있으며 메모리가 부족한 경우에만 해제하려고합니다. 사실 더 나은 캐싱이 좋겠지 만 메모리가 부족할 때 캐시를 해제하는 좋은 방법을 찾을 수 없습니다. –
가비지 컬렉터가 예상대로 작동하고 응용 프로그램이 실행될 때 문자열에 대한 참조를 정리해야합니다. 이들이 수집되는 것을 보지 못한다면, 나는 당신이 참고 문헌을 붙잡고 있거나 문자열이 구속되고 있다고 생각합니다. –
일반적으로 약한 참조를 사용하면 깊이 불변 인 객체, 특히 다른 객체를 참조하지 않는 객체를 가리킬 필요가 없습니다. 데이터가 유용하다면 강력한 참고 자료를 보유해야합니다. 유용하지 않다면 아무런 언급도하지 말아야합니다. WeakReference의 사용은 weak 참조 객체의 유용성이 강력한 참조의 존재를 조건으로하는 경우에만 실제로 적합합니다. 가장 일반적인 경우는 약한 참조가 강한 참조를 통해 읽혀질 객체에 정보를 넣는 데 사용되는 경우입니다. 아무도 그 물건에 담긴 정보를 읽지 않는다면, 작가가 더 이상 그걸 다루지 않아도됩니다.
- 1. boost :: variant는 std :: string에서 작동합니까?
- 2. String에서 엄격한 비교를 사용해야합니까?
- 3. String에서 XmlNode의 innerText
- 4. std :: string에서 NULL을 삭제하십시오.
- 5. String에서 JSONObject 가져 오기
- 6. String에서 XDocument 채우기
- 7. String에서 객체를 만드는 방법은 무엇입니까?
- 8. String에서 org.xml.sax.InputSource를 어떻게 만듭니 까?
- 9. String에서 LinkedList로 java 인수 캐스팅
- 10. string에서 regexp 결과를 추출하여 변수에 쓰십시오.
- 11. Javascript 함수 String에서 생성자가 실행되지 않습니다.
- 12. Java에서 String에서 XML 객체를 만드는 방법은 무엇입니까?
- 13. 복사하지 않고 std :: string에서 스트리밍 하시겠습니까?
- 14. RegEx String에서 내부 인트라넷 링크 제거 .NET
- 15. String에서 TextReader까지 확장 메서드 ... 스트림을 닫으려면 어떻게해야합니까?
- 16. 통화에서 수학을 수행하기 위해 String에서 BigDecimal로 변환
- 17. String에서 HashMap으로 변환하는 가장 좋은 방법은 무엇입니까?
- 18. msdeploy --- 작동합니까, 아니면 작동합니까?
- 19. 임베디드 응용 프로그램의 std :: string에서 std :: wstring으로 전환 하시겠습니까?
- 20. VB.net에서 String에서 stringarray로 변환 할 때 문자열의 내용이 엉망이 됨
- 21. XSD : simpleType의 데이터 형식을 재정의하는 방법. xs : string에서 xs : integer로
- 22. flex + bison의 작동 예제가 파일이 아닌 string에서 입력 되었습니까?
- 23. Eclipse 플러그인 만들기 : String에서 클래스 선언을 여는 방법 "java.is.Good"
- 24. Java String에서 캐리지 리턴 (HEX 0A)을 제거하는 방법?
- 25. C#의 String에서 Newline을 가장 빨리 제거하는 방법은 무엇입니까?
- 26. dynamicaly로 작성된 String에서 참조하는 Label에서 Text를 가져올 때 InvalidCastException이 수정됩니까?
- 27. 목표 C의 기본 String에서 문자열의 일부를 가져 오는 방법
- 28. xt : string에서 Biztalk 스키마의 강력한 형식으로 데이터 형식을 변경하는 방법?
- 29. 메모리 조각 모음 소프트웨어. 어떻게 작동합니까? 작동합니까?
- 30. IntentFilter가이를 작동합니까?
그건 내 첫 번째 생각 이었지만 사실입니까? 이 질문도 참조하십시오 : http://stackoverflow.com/questions/208387/weakreference-bug – Razzie
@ Razzie : 이것은 GC가 문자열을 사용하는 방법에 대한 암시 일뿐입니다. – Noldorin