2010-06-11 44 views
17

使用來自不同線程的相同對象Encoding是否安全?C#中的線程安全和System.Text.Encoding

通過「使用」我的意思是,呼籲Encoding.GetString()Encoding.GetBytes()並與XmlWriter(通過類似XmlWriter.Create(myStream, new XmlWriterSettings() { Encoding = myEncoding })創建。

MSDN網站寫一些XML指出,「任何實例成員不能保證是線程安全的」 。

所以,我怎麼能放心地寫兩個XML文檔同時(謝謝!!)

回答

23

是的,它應該是安全的,使用相同的Encoding對象,因爲它的設計是無狀態 - 而EncoderDecoder是有狀態的,必要時保持不完整的字符等。我想你可能寫了一個有狀態的Encoding類,但它會是一個非常糟糕的主意。據我所知,所有內置的編碼實現都是無狀態和線程安全的。

例如,Encoding.UTF8,等屬性是單身人士。

+0

謝謝!我只是想確定,因爲在其他地方找不到確認。 – thaller 2010-06-11 16:36:13

+0

是不是? Encoding上的靜態屬性是線程安全的,但這並不意味着這些屬性公開的對象是線程安全的。我處於需要並行編碼大量字符串的情況,而且我不想創建大量的'Utf8Encoding'實例。 – casperOne 2012-09-05 19:30:30

+0

@casperOne:兩個問題:1)你知道'Encoding.UTF8'每次都會給出一個新的編碼; 2)你是否真的測量過每次創建新實例是否會產生問題? – 2012-09-05 19:32:42