Skip to content

Commit 9d7637e

Browse files
committed
micro optimization for multidim arrays of simple objects
1 parent 4969337 commit 9d7637e

1 file changed

Lines changed: 8 additions & 1 deletion

File tree

DeepCloner/Helpers/DeepClonerGenerator.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,14 +156,21 @@ internal static Array CloneAbstractArrayInternal(Array obj, DeepCloneState state
156156
var lowerBounds = Enumerable.Range(0, rank).Select(obj.GetLowerBound).ToArray();
157157
var idxes = Enumerable.Range(0, rank).Select(obj.GetLowerBound).ToArray();
158158

159-
var outArray = Array.CreateInstance(obj.GetType().GetElementType(), lengths, lowerBounds);
159+
var elementType = obj.GetType().GetElementType();
160+
var outArray = Array.CreateInstance(elementType, lengths, lowerBounds);
160161

161162
state.AddKnownRef(obj, outArray);
162163

163164
// we're unable to set any value to this array, so, just return it
164165
if (lengths.Any(x => x == 0))
165166
return outArray;
166167

168+
if (DeepClonerSafeTypes.CanReturnSameObject(elementType))
169+
{
170+
Array.Copy(obj, outArray, obj.Length);
171+
return outArray;
172+
}
173+
167174
var ofs = rank - 1;
168175
while (true)
169176
{

0 commit comments

Comments
 (0)