2009-08-06 14 views
13

クラスをシリアライズ可能とマークする際の欠点は何ですか?クラスをシリアライズ可能なものとしてマーキングすることの短所

私は自分のasp.netセッションをdbに保存する必要があり、セッション内のオブジェクトは直列化可能である必要があります。

意味があります。

しかし、[Serializable]属性を持つクラスをデコレートするだけで済み、.NETは既にクラスをシリアライズ可能にする基盤となるインフラストラクチャを備えていることになります。だから、なぜデフォルトでそれを行うことができないのですか?

このようにマークする必要はありますか?

答えて

28

なぜ、デフォルトではどうしてできないのですか?

オブジェクトの自動シリアル化/逆シリアル化では不十分な場合があります。たとえば、オブジェクトには、ローカルファイルの名前、メモリへのポインタ、共有配列へのインデックスなどを保持するフィールドが含まれている可能性があります。システムは通常、これらの生の値を問題なくシリアル化できますが、それは使用できません。一般に、システムがこれを自ら把握することは不可能です。クラスにSerializableとマークするよう要求することにより、これらの考慮事項を考慮したことになります。

-1

欠点の点では、シリアル化の主な欠点は、パフォーマンスオーバーヘッド(CPUとディスクの両方)と潜在的なレイテンシの問題です。 XMLのシリアライゼーションは一般的なプロパティとクラスでのみ機能するため、一般的にXMLのシリアル化は安全ではないため、セキュリティに多少の懸念があるかもしれません。もちろん、セキュリティが本当に懸念されている場合は、セッション中にあまりにも機密性の高いデータを格納しているとは限りません。

Silverlightを使用している場合、Silverlightは[Serializable]属性をサポートしないため、Silverlightアセンブリでは装飾されたクラスは使用できなくなります。

セッション管理のために、ASPStateデータベースに格納された小さなオブジェクトは、通常、メモリセッション上で目立つ違いなく、正常に動作します。スペクトルの反対側では、プロパティなどとして他のオブジェクトのリストを持つ大きなオブジェクトを持っていて、十分に大きければパフォーマンスのヒットが目立つことがあります。

+3

xmlのシリアル化はここでは問題ではありません。このコンテキストでは使用されず、 '[Serializable]'とは関係ありません。 –

関連する問題