返回匿名类巨慢 返回

C#论坛 老数据
10 3370

image.png

上图是SqlSugar的执行时间,才跑1/5就用了4分钟了。


image.png

            // 匿名类初始化 ########################

            TypeRuntimeInfo runtime = TypeRuntimeInfoCache.GetRuntimeInfo<T>();

            Inte.XFramework.Reflection.Emit.ConstructorInvoker ctor = runtime.Constructor;

            if (runtime.IsAnonymousType)

            {

                values = new object[reader.FieldCount];

                reader.GetValues(values);

                for (index = 0; index < values.Length; ++index)

                {

                    if (values[index] is DBNull) values[index] = null;

                }

                return (T)ctor.Invoke(values);

            }


这是我换一种写法的时间,跑完才用2分钟不到。

楼主是不是要优化了。。。

热忱回答10

  • 你确定上在面的图是sqlsugar?  明明是EF吧

    0 回复
  • 绝情草 绝情草 VIP0
    2017/11/17

    @fate stay night:自己写的代码都不认识,要拿什么才能拯救你。。。

    EF 有Queryable<T>()这种写法?

    0 回复
  • sqlsugar 什么时候支持了 form in ?

    0 回复
  • EF一直都支持queryable<T>()只不过是IQueryable我的是ISqlSugarable

    0 回复
  • 绝情草 绝情草 VIP0
    2017/11/17
    1. EF一直都支持queryable<T>(),那真的是要请教了。。。我只看过DbContext.Set 和 DbContext.Provider.SqlQuery。

    2. 如果您还不知道 

      from a in context.Set<T>()

      where ***

      select ***

      这种写法怎么才能转换成 context.Set<T>().Where().Select(),还是建议多补补课。

    3. 如果这种图您都不认得,那对SqlSugau的作者真的很失望

    0 回复
  • 绝情草 绝情草 VIP0
    2017/11/17

    image.png

    补发图片

    0 回复
  • @绝情草: https://msdn.microsoft.com/en-us/library/bb351562(v=vs.110).aspx


    首先EF是支持这种写法的,底层就是IQueryable<T>的扩展方法


    第二  EF这种我当然知道,问题是我没用微软原生的类你这种写法也能通过让我很吃惊,我的ISqlSugarable不是一个集合也没有实现IQueryable接口



    0 回复
  • 第三点,你的上面代码并不能实现我的需求 例如 .Select((st,sc)=>new {sc,st,sc.id}).ToList()对这种复杂的无解


    性能我也和EF之类作过比较只快不慢,后期会优化的更好,至于微软是如何把我自定义的一个接口(非集合接口)支持 from c in 这种语法并且还能正确的转成我自定义接口里面的方法,可能还真让你失望了我真不明白,或者就是IDE的一个巧合 我正好有 Where  Select微软IDE的一个BUG也说不定

    0 回复
  • 绝情草 绝情草 VIP0
    2017/11/18

    image.png

    自定义的类(接口)只要参考着IQueryable<T>实现了上面这些方法,那么就可以用from c in 这种写法(查询操作符写法)。其实 查询操作符写法 最终还是会编译成上面的这些方法(点操作符写法)

    0 回复
  • 路过,作者完全是开源,纯技术交流,哥们儿,可以提建议,但不要带火药味。

    0 回复