2010-06-11 19 views
17

Czy można bezpiecznie używać tego samego obiektu Encoding z różnych wątków?Bezpieczeństwo wątków i System.Text.Encoding w języku C#

Przez „używając” mam na myśli, nazywając Encoding.GetString(), Encoding.GetBytes() i napisać XML z XmlWriter (stworzony przez coś podobnego XmlWriter.Create(myStream, new XmlWriterSettings() { Encoding = myEncoding }).

The stronie msdn stwierdza, że ​​„Wszelkie członków instancji nie są gwarancją pewności wątek” .

Tak, jak mogę spokojnie napisać dwa dokumenty XML jednocześnie (dziękuję !!)

Odpowiedz

23

Tak, powinno być bezpiecznie korzystać z tego samego Encoding obiektu, jak to jest przeznaczone do bezpaństwowcem - natomiast Encoder i Decoder są stanowe, utrzymują niekompletne znaki itp., Jeśli to konieczne. Przypuszczam, że można można pisać stateful Encoding klasy, ale byłby to naprawdę zły pomysł. O ile mi wiadomo, wszystkie wbudowane implementacje kodowania są bezpaństwowcami i wątkami.

Na przykład właściwościami etc etc są single.

+0

Dziękuję! Chciałem tylko upewnić się, ponieważ nie mogłem znaleźć potwierdzenia w innym miejscu. – thaller

+0

Czy to jednak? Właściwości statyczne w "Kodowaniu" są bezpieczne dla wątków, ale nie oznacza to, że obiekty odsłonięte przez te właściwości są wątkowo bezpieczne. Jestem w sytuacji, w której muszę kodować * dużą * liczbę ciągów równolegle i nie chcę tworzyć ton instancji instancji 'Utf8Encoding'. – casperOne

+0

@casperOne: Dwa pytania: 1) Czy wiesz, że 'Encoding.UTF8' faktycznie daje nowe kodowanie za każdym razem; 2) Czy właściwie zmierzyłeś *, czy za każdym razem tworzenie nowej instancji byłoby problemem, nawet jeśli tak się dzieje? –

Powiązane problemy