Недостатки маркировки класса как сериализуемого

Каковы недостатки маркировки класса как сериализуемого?

Мне нужно сохранить сеанс asp.net в БД, и он требует, чтобы объекты в сеансе были сериализуемыми.

Имеет смысл.

Но оказывается, что все, что мне нужно было сделать, это украсить этот класс [Serializable] атрибут, и это работало, так что это означает, что.NET уже имеет базовую инфраструктуру, чтобы сделать классы сериализуемыми. Так почему же он не может сделать это по умолчанию?

Что нужно пометить как таковой?

2 ответа

Решение

Так почему же он не может сделать это по умолчанию?

Автоматическая сериализация / десериализация может быть недостаточно для объекта. Например, объект может содержать поле, содержащее имя локального файла, указатель на память, индекс в общий массив и т. Д. Хотя система обычно может без проблем сериализовать эти необработанные значения, десериализация может легко привести к чему-то это не годится для использования. В общем, система не может понять это самостоятельно. Требуя от вас пометить класс SerializableВы указываете, что учли эти соображения.

С точки зрения недостатков, основным недостатком сериализации является снижение производительности (как процессора, так и диска), а также потенциальные проблемы с задержкой при отправке по проводам. С безопасностью могут быть небольшие проблемы, потому что в общем случае сериализация XML небезопасна, поскольку она работает только с открытыми свойствами и классами, в некоторых случаях вынуждая вас открывать свойства, которых у вас может не быть иначе. Конечно, если безопасность действительно важна, вы, вероятно, не будете хранить слишком чувствительные данные в сеансе.

Если вы используете Silverlight, один потенциальный недостаток состоит в том, что Silverlight не поддерживает атрибут [Serializable], поэтому любые классы, украшенные им, будут непригодны для ваших сборок Silverlight.

Тем не менее, для управления сеансами небольшие объекты, хранящиеся в базе данных ASPState, обычно работают просто отлично, без какой-либо заметной разницы в сеансе памяти. На противоположном конце спектра у меня были большие объекты со списками других объектов, таких как свойства и т. Д., И если они достаточно велики, снижение производительности может быть заметным время от времени.

Другие вопросы по тегам