2010-06-11 3 views
17

Ist es sicher, das gleiche Objekt Encoding aus verschiedenen Threads zu verwenden?Gewindesicherheit und System.Text.Encoding in C#

von „using“ Ich meine, rief Encoding.GetString(), Encoding.GetBytes() und einige XML mit einer XmlWriter (erstellt durch so etwas wie XmlWriter.Create(myStream, new XmlWriterSettings() { Encoding = myEncoding }) schreiben.

die MSDN-Website heißt es: „Für Instanzelemente nicht Thread-sicher sein, sind garantiert“ .

Also, wie kann ich sicher gleichzeitig zwei XML-Dokumente schreibt (danke !!)

Antwort

23

Ja, es sollte sicher sein, das gleiche Encoding Objekt zu verwenden, wie es konzipiert ist staatenlos zu sein - während Encoder und Decoder sind statusbehaftet und behalten bei Bedarf unvollständige Zeichen usw. bei. Ich nehme an, Sie könnte schreiben eine Stateful Encoding Klasse, aber es wäre eine wirklich schlechte Idee. Soweit ich weiß, sind alle integrierten Codierungsimplementierungen statusfrei und threadsicher.

Zum Beispiel sind die Encoding.UTF8, usw. Eigenschaften Singletons.

+0

Vielen Dank !! Ich wollte nur sicher sein, aber ich konnte nirgendwo anders eine Bestätigung finden. – thaller

+0

Ist es aber? Die statischen Eigenschaften von 'Encoding' sind Thread-sicher, aber das bedeutet nicht, dass die Objekte, die durch diese Eigenschaften verfügbar gemacht werden, Thread-sicher sind. Ich bin in einer Situation, wo ich eine * große * Anzahl von Strings parallel kodieren muss und ich will nicht Tonnen von Instanzen der 'Utf8Encoding' Instanz erstellen. – casperOne

+0

@casperOne: Zwei Fragen: 1) Weißt du, dass 'Encoding.UTF8' tatsächlich jedes Mal eine neue Kodierung gibt; 2) Haben Sie tatsächlich * gemessen *, ob es ein Problem wäre, jedes Mal eine neue Instanz zu erstellen, selbst wenn dies der Fall ist? –