2010-06-11 3 views
17

Можно ли использовать один и тот же объект Encoding из разных тем?Безопасность резьбы и System.Text.Encoding в C#

Под «использованием» Я имею в виду, называя Encoding.GetString(), Encoding.GetBytes() и написать какой-нибудь XML с XmlWriter (создается что-то вроде XmlWriter.Create(myStream, new XmlWriterSettings() { Encoding = myEncoding }).

На сайте MSDN говорится, что «членов экземпляров не гарантируется поточно» .

Итак, как я могу смело писать два XML-документы одновременно (спасибо !!)

ответ

23

Да, это должно быть безопасно использовать один и тот же Encoding объект, так как он предназначен, чтобы быть лицом без гражданства - в то время как Encoder и Decoder сохраняют состояние, сохраняя при этом неполные символы и т. Д. Я полагаю, вы могли написать состояние Encoding, но это была бы очень плохая идея. Насколько мне известно, все встроенные реализации кодирования являются безстоящими и потокобезопасными.

Например, Encoding.UTF8, и т. Д. Являются одноточечными.

+0

спасибо !! Я просто хотел быть уверенным, потому что не смог найти подтверждения в другом месте. – thaller

+0

Неужели? Статические свойства «Кодирование» являются потокобезопасными, но это не означает, что объекты, подверженные этим свойствам, являются потокобезопасными. Я в ситуации, когда мне приходится кодировать * большое количество строк параллельно, и я не хочу создавать множество экземпляров экземпляра 'Utf8Encoding'. – casperOne

+0

@casperOne: Два вопроса: 1) Знаете ли вы, что 'Encoding.UTF8' на самом деле дает новую кодировку каждый раз; 2) На самом деле вы * измерили *, будет ли проблема создавать новый экземпляр каждый раз, даже если это произойдет? –