Objektkopie nähert sich in .net: Auto-Mapper, Emit Mapper, Implizite Betrieb, Objekt kopieren

StackOverflow https://stackoverflow.com/questions/3457657

Frage

Wenn jemand noch mehr Möglichkeiten, dies zu tun in .NET weiß, und auch, was ist Ihre Meinung darüber Ansätze? Welcher Ansatz Sie wählen und warum?

Hier ist die Tests von verschiedenen Möglichkeiten der Objektkopie in .NET.

ähnliche Tests zu diesem ursprünglichen Thread: Wie Wert von Klasse X Klasse Y mit demselben eigenschafts~~POS=TRUNC in c # kopieren?

So, hier ist es, Sie können es selbst betreiben:

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

Die Testergebnisse auf meinem PC:

Test Auto-Mapper: 22322 ms

Test Implizite Betreiber: 310 ms

Test Property Copy: 250 ms

Test Emit Mapper: 281 ms

Sie können emit und Auto -mappers von hier:

http://emitmapper.codeplex.com/

http://automapper.codeplex.com/

War es hilfreich?

Lösung

Es ist auch möglich, T4 zu verwenden Klassen zu erzeugen, die Kopier- Code generieren.

Gut: läuft so schnell, wie es möglich ist, Schlecht: "Codierung" in T4 Hässliche: Herstellung der Build-Skripte, die Ihnen erlauben, sie alle auf einmal zu kompilieren

Andere Tipps

Haben Sie die Clone-Methode versucht zwingende Objektinstanzen zu kopieren? Auf diese Weise erhalten Sie einen neuen Schüler Objekt wie folgt:

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

ich diesen Ansatz finden die einfachste Möglichkeit, Objekte in neue Objekte zu kopieren, obwohl ich keine Geschwindigkeitstests getan haben, um herauszufinden, wie gut funktioniert es gegen die Methoden vor.

die Clone für die Kopie ist der gleiche Typ nicht für 2 verschiedene Objekte kopiert dann nicht für diesen Bereich verwendet werden kann, ein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top