2010-06-11 147 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