本CLR Via C#
は、バイナリシリアル化を使用してオブジェクトを簡単に複製する方法を示しています。そのようなBinaryFormatter
を作成するときにそれはStreamingContextStates.Clone
指定StreamingContextStates.Cloneは実際に何をしていますか?
:
var formatter = new BinaryFormatter
{
Context = new StreamingContext(StreamingContextStates.Clone)
};
The documentation for StreamingContextStates.Clone
は
は、オブジェクトグラフがクローニングされていることを指定することを言います。ユーザーは、同じプロセス内でクローングラフが引き続き存在し、ハンドルや管理されていないリソースへの参照に安全にアクセスできると想定できます。
十分に公正ですが、実際にはどういう意味なのか分かりません。どのようにして実際にはBinaryFormatter
の動作が変わりますか?誰でもこの旗を使用している具体的な効果を列挙できますか?
、私は**強く**あなたも、ほとんどの状況で 'BinaryFormatter'を避けることを示唆しています。それは便利なところがいくつかありますが、私は*たくさんの*人がこれに起因する痛みをたくさん持っているのを見ました...実際に、BinaryFormatterの問題は私がシリアライゼーションに深く関わっている理由の一部です数年前 –
このプロパティは 'ISerializable.GetObjectData(...)'に再公開されています。したがって、技術的には**どの実装も理論的には 'StreamingContextStates'値に基づいて異なる処理をすることができます。しかし、もしあれば、どれくらいの数があるのか分かりません。 –
@MarcGravell興味深いことに、ありがとう。 (そしておそらく、そのサンプルは次回の版ではC#経由でCLRから取り出されるべきです;) –