当前位置:  开发笔记 > 编程语言 > 正文

如何加快实例化大量对象?

如何解决《如何加快实例化大量对象?》经验,为你挑选了1个好方法。

对于任何显着大小的表,下面的代码都非常慢.(100,1000等...)罪魁祸首是实例化我的对象new T().请注意,这不是我最终确定的代码,我只是将其中的部分内容删除,以便更容易地进行分析.一旦我将代码重构成形状,实例化和初始化将一起发生.

有什么方法可以加快速度吗?我可能会忘记一些非常简单的事情,或者我可能会被剔除.希望是前者.

public static IList ToList(this DataTable table) where T : Model, new()
{
    T[] entities = new T[table.Rows.Count];

    // THIS LOOP IS VERY VERY SLOW
    for (int i = 0; i < table.Rows.Count; i++)
        entities[i] = new T();

    // THIS LOOP IS FAST
    for (int i = 0; i < table.Rows.Count; i++)
        entities[i].Init(table, table.Rows[i]);

    return new List(entities);
}

编辑更多信息:

任何给定的构造函数ModelType将如下所示:

public ModelType()
{
    _modelInfo = new ModelTypeInfo();
}

任何给定的构造函数ModelTypeInfo将简单地设置一些字符串和字符串[]值,并且该类的唯一作用是提供值集.

编辑更多信息:

因为它似乎是一个热门话题,所以在打破对象构造和初始化之前,这是我的方法对于实数的看法:

public static IList ToList(this DataTable table, ModelInfo modelInfo) where T : Model, new()
{
    var tempRepository = new Repository(modelInfo);

    var list = new List();
    foreach (DataRow row in table.Rows)
        list.Add(tempRepository.FromData(table, row));

    return list;
}

Jeffrey Hant.. 13

在封面下,new T()生成一个System.Activator.CreateInstance()(反射)缓慢的调用:

L_0012: ldc.i4.0 
L_0013: stloc.1 
L_0014: br.s L_0026
L_0016: ldloc.0 
L_0017: ldloc.1 
L_0018: call !!0 [mscorlib]System.Activator::CreateInstance()
L_001d: stelem.any !!T
L_0022: ldloc.1 
L_0023: ldc.i4.1 
L_0024: add 
L_0025: stloc.1 

您可能希望考虑传递建筑代表.



1> Jeffrey Hant..:

在封面下,new T()生成一个System.Activator.CreateInstance()(反射)缓慢的调用:

L_0012: ldc.i4.0 
L_0013: stloc.1 
L_0014: br.s L_0026
L_0016: ldloc.0 
L_0017: ldloc.1 
L_0018: call !!0 [mscorlib]System.Activator::CreateInstance()
L_001d: stelem.any !!T
L_0022: ldloc.1 
L_0023: ldc.i4.1 
L_0024: add 
L_0025: stloc.1 

您可能希望考虑传递建筑代表.


是的 - 您可以在循环中调用typeof(T).GetConstructor()一次,并调用ConstructorInfo.Invoke().这应该会大大加快速度.
推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有