Реализация сувенира на .NET - PullRequest
3 голосов
/ 12 ноября 2008

Я видел две разные реализации сувенира в .NET.

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

Другой - сериализация объекта с использованием BinaryFormatter и MemoryStream.

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


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

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

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

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

Ответы [ 4 ]

2 голосов
/ 12 ноября 2008

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

0 голосов
/ 16 апреля 2012

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

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

0 голосов
/ 12 ноября 2008

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

0 голосов
/ 12 ноября 2008

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

в противном случае клонированный объект в порядке

...