我正在尝试优化一段克隆对象的代码:
#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
非常标准的东西。问题是该对象非常强大,需要 5.4 秒(根据 ANTS Profiler - 我确信有分析器开销,但仍然如此)。
有没有更好更快的克隆方式?
最佳答案
不要实现 ICloneable。
克隆一个对象的快速方法是创建一个相同类型的新实例,并将所有字段从原始实例复制/克隆到新实例。不要试图提出可以克隆任何类的任何对象的“通用”克隆方法。
例子:
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);
}
}
关于c# - 更快的克隆方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2784971/