c# - 更快的克隆方式

标签 c# .net performance .net-2.0 cloning

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

#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 - 我确信有分析器开销,但仍然如此)。

有没有更好更快的克隆方式?

最佳答案

  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);
    }
}

关于c# - 更快的克隆方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2784971/

相关文章:

python - 在 numpy 中从其他矩阵创建最大结果矩阵的最有效方法?

javascript - Canvas RGBA 到 RGB 转换

c# - 以编程方式加载程序集及其依赖项时的奇怪行为

c# - 是否可以在不请求访问联系人的情况下使用 Google api 获取用户电子邮件

.net - 我如何使用 iExpress 从多个 .msi 和 .exe 进行单一设置?

C#:合并多数据库驱动接口(interface)

java - 为什么 cypher 查询或可能是 Neo4j 性能低下?

c# - 以MVC形式动态添加元素

c# - 如何处理未初始化的局部变量

c# - MVC "UrlData[0]"