12

If some one knows any more ways of doing this in .NET and also what is your opinions about that approaches? Which approach you choose and why?

Here is the tests of different ways of object copy in .NET.

Tests Related to this original thread: How to copy value from class X to class Y with the same property name in c#?

So, here it is, you can run it yourself:

static void Main(string[] args)
    {
        Student _student = new Student();
        _student.Id = 1;
        _student.Name = "Timmmmmmmmaaaahhhh";
        _student.Courses = new List<int>();
        _student.Courses.Add(101);
        _student.Courses.Add(121);

        Stopwatch sw = new Stopwatch();

        Mapper.CreateMap<Student, StudentDTO>();            

        StartTest(sw, "Auto Mapper");

        for (int i = 0; i < 1000000; i++)
        {
            StudentDTO dto = Mapper.Map<Student, StudentDTO>(_student);
        }

        StopTest(sw);

        StartTest(sw, "Implicit Operator");

        for (int i = 0; i < 1000000; i++)
        {
            StudentDTO itemT = _student;
        }

        StopTest(sw);

        StartTest(sw, "Property Copy");

        for (int i = 0; i < 1000000; i++)
        {

            StudentDTO itemT = new StudentDTO
            {
                Id = _student.Id,
                Name = _student.Name,
            };

            itemT.Courses = new List<int>();
            foreach (var course in _student.Courses)
            {
                itemT.Courses.Add(course);
            }
        }

        StopTest(sw);

        StartTest(sw, "Emit Mapper");

        ObjectsMapper<Student, StudentDTO> emitMapper = ObjectMapperManager.DefaultInstance.GetMapper<Student, StudentDTO>();

        for (int i = 0; i < 1000000; i++)
        {
            StudentDTO itemT = emitMapper.Map(_student);
        }

        StopTest(sw);
    }

Tests results on my PC:

Test Auto Mapper:22322 ms

Test Implicit Operator:310 ms

Test Property Copy:250 ms

Test Emit Mapper:281 ms

You can get emit and auto -mappers from here:

http://emitmapper.codeplex.com/

http://automapper.codeplex.com/

Community
  • 1
  • 1
angularrocks.com
  • 26,767
  • 13
  • 87
  • 104
  • 5
    That's great, but what is your question? – Oded Aug 11 '10 at 11:15
  • Yeah, I don't see the point of all this. You need a goal before you can even decide that you need a copy (instead of using the original object), and you need a goal in order to choose the right approach. That said, another copier is MemberwiseClone(). – Qwertie Nov 10 '10 at 16:30
  • Are you trying to create a copy of object for testing..I don't understand question...u can use mole in .net4...Mapper would work best..But please clarify your question – WingMan20-10 Nov 12 '10 at 17:55

3 Answers3

4

It is also possible to use T4 to generate classes that will generate property copy code.

Good: runs as fast as it is possible Bad: "coding" in T4 Ugly: Making build scripts that allow you to compile it all in one go

Ivan Zivkovic
  • 427
  • 3
  • 18
1

the Clone is for copy the same Type not for copying from 2 different objects Type then can't be used for this scope.

Giuseppe
  • 89
  • 3
1

Have you tried overriding the Clone method to copy object instances? This way, you get a new student object like this:

for (int i = 0; i < 1000000; i++) 
{ 
     StudentDTO itemT = _student.Clone(); 
}

I find this approach the easiest way of copying objects into new objects, though I haven't done any speed tests to find out how well it performs against the methods you suggest.

Jazza
  • 1,042
  • 1
  • 9
  • 22