2010-06-11 5 views
17

의 System.Text.Encoding 다른 스레드의 동일한 Encoding 개체를 사용하는 것이 안전합니까? , Encoding.GetString()Encoding.GetBytes()를 호출하고 XmlWriter (XmlWriter.Create(myStream, new XmlWriterSettings() { Encoding = myEncoding }) 같은 만든.스레드 안전성 및 C#

MSDN 사이트와 일부 XML 쓰기, 내 말은 "사용"으로

는 "모든 인스턴스 멤버는 스레드로부터 안전이 보장되지 않는다"고 주장한다 .

그래서, 어떻게 안전하게 동시에 두 개의 XML 문서를 작성할 수 있습니다 (감사합니다!)가 국적을 상실하도록 설계로

답변

23

예, 같은 Encoding 객체를 사용하는 것이 안전합니다 - Encoder 및 반면, Decoder은 필요에 따라 불완전한 문자 등을 유지하면서 상태를 유지합니다. 나는 당신이 일 수 있다고 생각합니다은 상태가 좋은 Encoding 클래스를 작성하지만 정말 나쁜 아이디어 일 것입니다. 지금까지 알고있는 모든 기본 제공 인코딩 구현은 상태 비 저장이며 스레드로부터 안전합니다.

예를 들어 Encoding.UTF8, 등의 속성은 싱글 톤입니다.

+0

감사합니다. 나는 단지 확신하고 싶었지만 다른 곳에서는 확인을 찾을 수 없었습니다. – thaller

+0

그래도 되니? 'Encoding'의 정적 속성은 스레드로부터 안전합니다. 그렇다고해서 해당 속성에 의해 노출 된 객체가 스레드로부터 안전하다는 것을 의미하지는 않습니다. 나는 * 큰 수의 문자열을 병렬로 인코딩해야하며'Utf8Encoding' 인스턴스의 인스턴스를 엄청 많이 만들지는 않습니다. – casperOne

+0

@casperOne : 두 가지 질문 : 1) 'Encoding.UTF8'은 매번 새로운 인코딩을 제공한다는 것을 알고 계십니까? 2) 매번 새로운 인스턴스를 생성하는 것이 문제가되는지 여부를 실제로 측정 했습니까? –

관련 문제