我一直在這一段時間停留,我很難過。 Automapper需要4秒鐘來映射19個對象。操作應該在我的機器上花費毫秒或納秒(24gb ram,3.6Ghz i7)。AutoMapper需要4秒來映射19個對象
這是映射調用。
var messageDtos = AutoMapperConfig.Mapper.Map<List<Message>, List<MessageDTO>>(messages);
這是我Automapper配置
public static class AutoMapperConfig
{
public static IMapper Mapper;
public static void Configure()
{
MapperConfiguration config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<User, UserDTO>();
cfg.CreateMap<UserDTO, User>();
cfg.CreateMap<ConversationUser, ConversationUserDTO>();
cfg.CreateMap<ConversationUserDTO, ConversationUser>();
cfg.CreateMap<Conversation, ConversationDTO>();
cfg.CreateMap<ConversationDTO, Conversation>()
.ForMember(dest => dest.ConversationUsers, opt => opt.MapFrom(src => src.ConversationUsers));
cfg.CreateMap<Message, MessageDTO>();
cfg.CreateMap<MessageDTO, Message>();
});
Mapper = config.CreateMapper();
}
}
下面是相關的對象。他們沒有什麼瘋狂的。
public class Message
{
public int MessageId { get; set; }
public virtual Conversation Conversation { get; set; }
public virtual User User { get; set; }
public string Text { get; set; }
public DateTime CreateDate { get; set; }
public virtual ICollection<MediaMessage> MediaMessages { get; set; }
public virtual ICollection<ReadReceipt> ReadReceipts { get; set; }
public Message()
{
CreateDate = DateTime.Now;
}
}
public class MessageDTO
{
public int MessageId { get; set; }
public virtual ConversationDTO Conversation { get; set; }
public virtual UserDTO User { get; set; }
public string Text { get; set; }
public DateTime CreateDate { get; set; }
public virtual ICollection<MediaMessage> MediaMessages { get; set; }
public virtual ICollection<ReadReceipt> ReadReceipts { get; set; }
public string Type { get; set; }
public string TransferGuid { get; set; }
}
public class ConversationDTO
{
public int ConversationId { get; set; }
public virtual UserDTO Owner { get; set; }
public virtual DateTime CreateDate { get; set; }
public virtual ICollection<ConversationUserDTO> ConversationUsers { get; set; }
public virtual Image Image { get; set; }
public virtual Message RecentMessage { get; set; }
}
public class UserDTO
{
public int UserId { get; set; }
public string Name { get; set; }
public DateTime CreateDate { get; set; }
public virtual PhoneNumber PhoneNumber { get; set; }
public virtual string TwitterHandel { get; set; }
public virtual Image Image { get; set; }
}
這裏是點跟蹤的屏幕截圖顯示Automapper多長時間服用,不知道它有多大的洞察力提供了,我剛安裝dotrace昨日摸不着頭腦。
我認爲這條線是造成問題.ForMember(DEST => dest.ConversationUsers,選擇=> opt.MapFrom(SRC => src.ConversationUsers)); –