gpt4 book ai didi

c# - AutoMapper 花费 4 秒绘制 19 个对象

转载 作者:行者123 更新时间:2023-12-02 14:36:53 27 4
gpt4 key购买 nike

我已经被这个问题困扰了一段时间了,我被难住了。 Automapper 需要 4 秒来映射 19 个对象。在我的机器(24GB 内存,3.6Ghz i7)上,该操作应该花费毫秒或纳秒。

这是映射调用。

 var messageDtos = AutoMapperConfig.Mapper.Map<List<Message>, List<MessageDTO>>(messages);

这是我的自动映射器配置

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

这是 dot Trace 中的屏幕截图,显示 Automapper 花费了多长时间,不确定它提供了多少洞察力,我昨天刚刚安装了 dotrace 来解决这个问题。 Automapper dotTrace breakdown

最佳答案

简而言之,正在进行数据库调用。

AutoMapper 正在调用关系属性 getter,它使用 EntityFramework 从数据库加载数据。

快速解决方法是禁用延迟加载的集合。

关于c# - AutoMapper 花费 4 秒绘制 19 个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40064747/

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