2010-06-11 15 views
17

È sicuro utilizzare lo stesso oggetto Encoding da thread diversi?Sicurezza thread e System.Text.Encoding in C#

Con il termine "utilizzo" Voglio dire, chiamando Encoding.GetString(), Encoding.GetBytes() e scrivere un po 'di XML con un (creato da qualcosa come XmlWriter.Create(myStream, new XmlWriterSettings() { Encoding = myEncoding }).

Il sito XmlWriter MSDN afferma che "I membri di istanza non sono garantiti per essere thread-safe" .

Così, come posso tranquillamente scrivere due documenti XML contemporaneamente (grazie !!)

risposta

23

Sì, dovrebbe essere sicuro da usare lo stesso Encoding oggetto, come è stato progettato per essere senza stato -?, mentre Encoder e Decoder sono stateful, mantenendo i caratteri incompleti ecc. Se necessario. Suppongo che tu possa scrivere una classe di stato Encoding, ma sarebbe una pessima idea. Per quanto ne so, tutte le implementazioni di codifica incorporate sono prive di stato e thread-safe.

Ad esempio, le proprietà Encoding.UTF8, ecc. Sono singleton.

+0

Grazie !! Volevo solo essere sicuro, ma non ho trovato conferma altrove. – thaller

+0

È però? Le proprietà statiche su 'Encoding' sono thread-safe, ma ciò non implica che gli oggetti esposti da quelle proprietà siano thread-safe. Sono in una situazione in cui devo codificare un * grande * numero di stringhe in parallelo e non voglio creare tonnellate di istanze dell'istanza 'Utf8Encoding'. – casperOne

+0

@casperOne: Due domande: 1) Sapete che 'Encoding.UTF8' dà effettivamente una nuova codifica ogni volta; 2) Hai effettivamente * misurato * se sarebbe stato un problema creare una nuova istanza ogni volta anche se lo fosse? –