当前位置: 首页 > 知识库问答 >
问题:

自动贴装机性能

百里成仁
2023-03-14

我正在使用Automapper将我的业务模型映射到ViewModel。

它能工作,但速度很慢。

我有一个包含6893个对象和23个属性的集合(测试环境、生产应该有更多)。

通过循环,需要00:02:32.8118534来映射所有内容。

var objects = // get all items (returns a collection of MyObj)
List<MyViewModel> collection = new List<MyViewModel>();
foreach (MyObj obj in objects)
{
     MyViewModel vm = Mapper.Map<MyObj, MyViewModel>(obj);
     collection.Add(vm);
}

我试着这样改进它:

var objects = // get all items (returns a collection of MyObj)
IEnumerable<MyViewModel> collection = mapper.Map<IEnumerable<MyObj>, IEnumerable<MyViewModel>>(objects);

00:02:25.4527961绘制了所有的地图。

所以这没什么帮助。

这是我配置映射器的方式:

var config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<MyObj, MyViewModel>();
            cfg.CreateMap<MyObjOtherObj, MyViewModelOtherObj>();
        });
mapper = config.CreateMapper();

MyObj:

public partial class MyObj
{
    public MyObj()
    {
        this.MyObjOtherObj= new HashSet<MyObjOtherObj>();
    }

    public long a{ get; set; }
    public short b{ get; set; }
    public string c{ get; set; }
    public string d{ get; set; }
    public string e{ get; set; }
    public string f{ get; set; }
    public string g{ get; set; }
    public string h{ get; set; }
    public string i{ get; set; }
    public string j{ get; set; }
    public string k{ get; set; }
    public string l{ get; set; }
    public string m{ get; set; }
    public bool n{ get; set; }
    public bool o{ get; set; }
    public bool p{ get; set; }
    public bool q{ get; set; }

    public virtual ICollection<MyObjOtherObj> MyObjOtherObj{ get; set; }
    public virtual Types Types { get; set; }
}

MyViewModel:

public class MyViewModel
{
    public long a{ get; set; }
    public short b{ get; set; }
    public string c{ get; set; }
    public string d{ get; set; }
    public string e{ get; set; }
    public string f{ get; set; }
    public string g{ get; set; }
    public string h{ get; set; }
    public string i{ get; set; }
    public string j{ get; set; }
    public string k{ get; set; }
    public string l{ get; set; }
    public string m{ get; set; }
    public bool n{ get; set; }
    public bool o{ get; set; }
    public bool p{ get; set; }
    public bool q{ get; set; }
    public string TypesDescription { get; set; }

    public List<MyViewModelOtherObj> MyObjOtherObj { get; set; }
}

MyObjOtherObj:

public partial class MyObjOtherObj
{
    public long id{ get; set; }
    public long MyObjId { get; set; }
    public short x{ get; set; }
    public string z{ get; set; }

    public virtual MyObj MyObj{ get; set; }
    public virtual SourceTypes SourceTypes { get; set; }
}

MyViewModelOtherObj:

public class MyViewModelOtherObj
{
    public long Id { get; set; }
    public long MyObjId { get; set; }
    public short x{ get; set; }
    public string z{ get; set; }
    public string SourceTypesDescription { get; set; }
}

编辑:

来源类型:

public partial class SourceTypes
{
    public SourceTypes()
    {
        this.MyObjOtherObj = new HashSet<MyObjOtherObj>();
    }

    public short SourceTypeId { get; set; }
    public string Description { get; set; }

    public virtual ICollection<MyObjOtherObj> MyObjOtherObj { get; set; }
}

类型:

public partial class Types
{
    public Types()
    {
        this.MyObj = new HashSet<MyObj>();
    }

    public short TypeId { get; set; }
    public string Description { get; set; }

    public virtual ICollection<MyObj> MyObj{ get; set; }
}

共有2个答案

牟波
2023-03-14

作为对我们评论的回应,您需要立即加载集合对象。看看下面这篇文章,这应该能解决你的问题:

加载相关实体

陈功
2023-03-14

AutoMapper的5.0版本有显著的性能提升。在我们的基准测试中,使用您在这里展示的非常类似的类型,我们可以在一秒钟多一点的时间内映射一百万个项目。在即将发布的5.1版本中,这会缩小得更多,我们只比手动映射慢3倍左右,主要是因为手动映射无法执行空检查。

我会升级的。

 类似资料:
  • 问题内容: 通常,编译器会生成代码以执行装箱和拆箱。但是,如果不需要带框的值,编译器怎么办?(Oracle标准)编译器是否足够智能以优化它? 看一下这个方法: 唯一相关的信息是,因此将例如数组的每个值装箱将是无用的。像下面的代码: 编译器会实际插入用于对数组的每个值进行装箱的代码吗? 问题答案: 您的代码中没有自动装箱。实际上,鉴于: 虽然可以将an自动装箱到,但Java 不会 将an自动装箱到。

  • 如果我有一个泛型参数,我通过模式匹配到基元(如 )来解析该参数,那么自动装箱是否比使用自定义包装器类型便宜?例如 对抗 第一种方法是否提供任何性能优势?如果该方法使用代替,这种情况是否相同: ?

  • 本文向大家介绍Python实现自动装机功能案例分析,包括了Python实现自动装机功能案例分析的使用技巧和注意事项,需要的朋友参考一下 前言 提示:在管理服务器的过程中,发现有很多服务器在启动的过程中默认以PXE方式启动,这就导致我们无法将PXE装机程序放开到所有的交换机端口中,本文是以Python对dell服务器进行了一些控制,更多厂商机器的管理和控制,仍在调研中。 提示:以下是本篇文章正文内容

  • 这里的“自动机”指的是”确定有限状态自动机”。而自动机是信息学奥林匹克竞赛、计算机科学中被广泛使用的一个数学模型,其思想在许多字符串算法中都有涉及,学习自动机有助于理解上述算法,但是学习自动机前一定要先了解基础图论的相关知识,这样才更好理解自动机。 自动机(确定有限状态自动机)是由一个非空有限状态的集合Q、一个输入字母表 Σ(非空有限字符的集合)、一个转移函数(单值映射)、一个开始状态、一个接受状

  • 本文向大家介绍VirtualBox安装CentOS实现鼠标自动切换和复制粘贴功能,包括了VirtualBox安装CentOS实现鼠标自动切换和复制粘贴功能的使用技巧和注意事项,需要的朋友参考一下 1. 输入命令: 2. 输入命令: 3. 可能会出现错误: 解决的办法是依次输入命令: 然后再运行: 就可以了: 以上所述是小编给大家介绍的VirtualBox安装CentOS实现鼠标自动切换和复制粘贴功

  • 如果我们有一个没有最终/接受状态的有限自动机。所以F是空的。你如何最小化它?我得到了一个测试,在这个测试中,我被要求最小化一个自动机,但是它有空的F,我不知道如何解决这个问题,因为自动机没有接受状态。一个包含所有转换的初始状态是正确最小化的自动机吗?我想如果两个自动机A和B对于任何可能的输入,A返回与B完全相同的输出,它们必须是等价的。因此,如果一个自动机没有最终状态,那么它不接受任何输入或者任何