I am trying to optimize a piece of code that clones an object:
#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
Pretty standard stuff. The problem is that the object is pretty beefy and it takes 5.4 seconds (according ANTS Profiler – I am sure there is the profiler overhead, but still).
Is there a better and faster way to clone?
Don’t implement ICloneable.
The fast way to clone an object is to create a new instance of the same type and copy/clone all fields from the original instance to the new instance. Don’t try to come up with a “generic” clone method that can clone any object of any class.
Example: