gpt4 book ai didi

c# - .net 中的对象复制方法 : Auto Mapper, Emit Mapper、隐式操作、属性复制

转载 作者:可可西里 更新时间:2023-11-01 08:27:45 27 4
gpt4 key购买 nike

如果有人知道在 .NET 中执行此操作的更多方法,您对这些方法有何看法?您选择哪种方法,为什么?

下面是.NET中对象拷贝不同方式的测试。

与此原始线程相关的测试:How to copy value from class X to class Y with the same property name in c#?

所以,在这里,您可以自己运行它:

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

我电脑上的测试结果:

测试自动映射器:22322 毫秒

测试隐式运算符:310 毫秒

测试属性复制:250 毫秒

测试发射映射器:281 毫秒

您可以从这里获取 emit 和 auto 映射器:

http://emitmapper.codeplex.com/

http://automapper.codeplex.com/

最佳答案

也可以使用 T4 生成将生成属性复制代码的类。

好:尽可能快地运行坏:T4 中的“编码”丑陋:制作允许您一次编译所有内容的构建脚本

关于c# - .net 中的对象复制方法 : Auto Mapper, Emit Mapper、隐式操作、属性复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3457657/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com