我正在使用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; }
}
作为对我们评论的回应,您需要立即加载集合对象。看看下面这篇文章,这应该能解决你的问题:
加载相关实体
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完全相同的输出,它们必须是等价的。因此,如果一个自动机没有最终状态,那么它不接受任何输入或者任何