Ну, во-первых, маршрут BinaryFormatter определенно должен быть медленнее, поскольку он использует отражение для получения / установки свойств. Наиболее распространенным методом является использование интерфейса IClonable в сочетании с конструктором копирования.
class A : ICloneable
{
private readonly int _member;
public A(int member)
{
_member = member;
}
public A(A a)
{
_member = a._member;
}
public object Clone()
{
return new A(this);
}
}
Конечно, строго говоря, вам нужен только конструктор копирования, который должен быть самым быстрым методом. Если ваши объекты просты, попробуйте использовать встроенную функцию MemberwiseClone .
class A : ICloneable
{
private readonly int _member;
public A(int member)
{
_member = member;
}
public object Clone()
{
return MemberwiseClone();
}
}
Тем временем я написал некоторый тестовый код , чтобы увидеть, был ли MemberwiseClone () значительно быстрее или медленнее, чем при использовании конструктора копирования. Вы можете найти это здесь . Я обнаружил, что MemberwiseClone на самом деле намного медленнее, чем выполнение CopyConstructor, по крайней мере, для небольших классов. Обратите внимание, что использование BinaryFormatter очень медленно.