- Notifications
You must be signed in to change notification settings - Fork10
C# extension method for fast object cloning. This is a speed-optimized forked version of Alexy Burtsev's deep copier.
License
jpmikkers/Baksteen.Extensions.DeepCopy
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This is a speed-optimized fork of Alexey Burtsev's deep copier. Depending on your usecase, this will be 2x - 3x faster than the original. It also fixes some bugs which are present in the original code. Compared to the classic binary serialization/deserialization deep clone technique, this version is about seven times faster (the more arrays your objects contain, the bigger the speedup factor).
The speedup is achieved via the following techniques:
- object reflection results are cached
- don't deep copy primitives or immutable structs & classes (e.g. enum and string)
- to improve locality of reference, process the 'fast' dimensions or multidimensional arrays in theinner loops
- use a compiled lamba expression to call MemberwiseClone
Use NuGet package manager to add the packageBaksteen.Extensions.DeepCopy to your project. Then:
using Baksteen.Extensions.DeepCopy;...var myobject = new SomeClass();...var myclone = myobject.DeepCopy()!; // creates a new deep copy of the original object
Note: the exclamation mark (null-forgiving operator) is only required if you enabled nullable reference types in your project
- Alexey Burtsev (original deep copy code)
- Wouter Groeneveld (unit tests & XElement copy)
- Gitkarst (treat enum as immutable)
- Jean-Paul Mikkers (speed optimization)
About
C# extension method for fast object cloning. This is a speed-optimized forked version of Alexy Burtsev's deep copier.
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Languages
- C#100.0%