2008-11-12 5 views
3

Я видел две разные реализации memento на .NET.Внедрение Memento на .NET

Один довольно простой - объект создает другой экземпляр сам по себе.

Другое сериализует объект, используя BinaryFormatter и MemoryStream.

Какой предпочтительный метод? Может ли кто-нибудь указать преимущества/недостатки каждого подхода?


Кстати, я заинтересован в том, чтобы взглянуть на него с точки зрения использования ресурсов и производительности разработчиков. Я прошу прощения за то, что не сказал об этом в первую очередь.

Предполагая, что память не нуждается в сохранении, что предпочтительнее?

С точки зрения производительности разработчиков сериализация выигрывает руки. Несколько строк, которые являются универсальными для любого объекта, более эффективны, чем необходимость вручную создавать клон, который включает в себя, возможно, частные конструкторы, назначения полей и т. Д.

Но опять же, возможно, сериализация тяжелая - я не уверен.

ответ

0

если вы собираетесь сохраняться сувениром, использовать метод сериализации

иначе, клонированный объект штрафа

2

Я думаю, что выбор того, как создать/сберегать сувенир зависит от того, как долго вы хотите, чтобы память сохранялась и нужно ли вам сообщать об этом через приложения. Если память существует только на короткое время и используется только одним и тем же потоком, то клонированный объект является разумным. Если память должна быть сохранена или передана другому приложению, то сериализация будет предпочтительнее. Если память долговечна, вы можете даже захотеть ее сериализовать и хранить ее снаружи (в файле или БД).

0

Назовите меня сумасшедшим и неэффективным, но я делаю свое для StringBuilder и из строки.

0

Часто BinaryFormatter и MemoryStream будут работать без необходимости писать много кода, но Clone() нуждается в коде, добавленном к каждому классу.

В противном случае я не вижу соответствия между двумя способами, если память не нуждается в сохранении

Смежные вопросы