二进制序列化,IFormatter:每次使用一个新的或在一个字段中存储一个?

时间:2013-05-14 13:59:46

标签: c# .net serialization

在.net C#中第一次使用二进制格式

来自MSDN的代码是这样的:

 IFormatter formatter = new BinaryFormatter();
 Stream stream = new FileStream("MyFile.lvl", FileMode.Create, FileAccess.Write,FileShare.None);
 formatter.Serialize(stream, Globals.CurrentLevel);
 stream.Close();

我想知道我应该在我班级的一个字段中存储一个IFormatter并一遍又一遍地使用它,还是我应该如上所述并在每次保存/加载某个东西时实例化一个新的?

我注意到它不是IDisposable

1 个答案:

答案 0 :(得分:7)

重新创建BinaryFormatter的开销很小,它在构造函数中设置的大多数属性都是enum,请看这里(感谢Reflector):

public BinaryFormatter()
{
    this.m_typeFormat = FormatterTypeStyle.TypesAlways;
    this.m_securityLevel = TypeFilterLevel.Full;
    this.m_surrogates = null;
    this.m_context = new StreamingContext(StreamingContextStates.All);
}

如果您要重新使用它,则需要同步对SerializeDeserialize方法的访问以保证它们的线程安全。