Ответ 1
Согласно MSDN:
Любой публичный статический (общий в Visual Basic) членами этого типа являются потоки безопасно. Любые члены экземпляра не являются гарантированно надежный поток.
Итак, вам нужно синхронизировать доступ к методам Serialize/Deserialize.
Определяли ли вы конкретные проблемы с производительностью, создавая экземпляр локального сериализатора каждый раз?
UPDATE:
Я бы доверял MSDN, потому что даже если в некоторых случаях мы можем проверить, что члены экземпляра могут быть потокобезопасными, это не значит, что со следующей версией пакета обновления/обновления/фрейма это будет продолжаться.
Поиск рефлектора в конструкторе BinaryFormatter:
public BinaryFormatter()
{
this.m_typeFormat = FormatterTypeStyle.TypesAlways;
this.m_securityLevel = TypeFilterLevel.Full;
this.m_surrogates = null;
this.m_context = new StreamingContext(StreamingContextStates.All);
}
И конструктор StreamingContext:
public StreamingContext(StreamingContextStates state, object additional)
{
this.m_state = state;
this.m_additionalContext = additional;
}
Совершенно откровенно назначая 6 свойств (большинство из которых enums
) должно быть ослеплятельно быстрым. ИМХО большую часть времени будет потрачено на методы Serialize/Deserialize.