如果有人知道在.NET中使用這種方法的更多方法,以及您對這種方法有何看法?你選擇哪種方法,爲什麼?.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 ms
Test Implicit Operator:310 ms
測試特性複製:250毫秒
測試的Emit映射:281毫秒
你可以從這裏發射和經銷商-mappers:
http://emitmapper.codeplex.com/
http://automapper.codeplex.com/
這很好,但你的問題是什麼? – Oded 2010-08-11 11:15:37
是的,我沒有看到這一點。在你決定需要一個副本(而不是使用原始對象)之前,你需要一個目標,並且你需要一個目標來選擇正確的方法。也就是說,另一臺複印機是MemberwiseClone()。 – Qwertie 2010-11-10 16:30:58
您是否嘗試創建一個測試對象的副本..我不明白問題......您可以在.net4中使用痣...... Mapper會最好的工作..但請澄清您的問題 – 2010-11-12 17:55:03