更快的克隆方式

Ang*_*ker 4 .net c# performance cloning .net-2.0

我正在尝试优化克隆对象的一段代码:

#region ICloneable
public object Clone()
{
    MemoryStream buffer = new MemoryStream();
    BinaryFormatter formatter = new BinaryFormatter();

    formatter.Serialize(buffer, this);     // takes 3.2 seconds
    buffer.Position = 0;
    return formatter.Deserialize(buffer);  // takes 2.1 seconds
}
#endregion
Run Code Online (Sandbox Code Playgroud)

很标准的东西.问题是该对象非常强大,需要5.4秒(根据ANTS Profiler - 我确信有探测器开销,但仍然).

是否有更好,更快的克隆方式?

dtb*_*dtb 6

  1. 不要实现ICloneable.

  2. 克隆对象的快速方法是创建相同类型的新实例,并将原始实例中的所有字段复制/克隆到新实例.不要试图提出可以克隆任何类的任何对象的"通用"克隆方法.

例:

class Person
{
    private string firstname;
    private string lastname;
    private int age;

    public Person(string firstname, string lastname, int age)
    {
        this.firstname = firstname;
        this.lastname = lastname;
        this.age = age;
    }

    public Person Clone()
    {
        return new Person(this.firstname, this.lastname, this.age);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我同意.我还想添加一个选项(3),使用不可变类型,这样你就不需要*克隆. (3认同)