在对小表执行查询时,LINQ非常慢

时间:2014-04-05 11:33:18

标签: c# linq foreach

我正在尝试从具有1K-2K记录的表中执行简单查询,并且由于某种原因,它需要超过10秒。 查询的结构是:

        using (context)
        {
            context.ObjectTrackingEnabled = false;

            foreach (Object _object in _objectSet)
            { 
                foreach (QueryFilter _filter in _fList)
                {  
                    try
                    {
                        Object2 object2 = precompiledQuery(context, _filter.var1, _filter.var2, _filter.var3, _filter.var4);
                    }
                    catch(Exception e)
                    { 
                        Console.WriteLine(e.Message);
                        break;
                    }
                }
            }

外部对象列表是另一个查询的结果 QueryFilters是为WHERE语句指定值的自定义对象,我认为它相当于在SQL中使用嵌套的IN语句。

预编译查询需要4-5毫秒(当匹配记录时)到30-60毫秒(当它返回null时)。

你注意到了什么问题吗?

编辑:

  • objectSet大小范围介于10-200个元素之间
  • filterList大小范围介于1-3个元素之间
  • precompiledQuery以Single()调用终止,因此返回记录
  • 这不是一个共享的上下文,我为这个操作创建了这个上下文

EDIT2:

    public static Func<LinqToSqlDataContext, int, int, bool, string, int, string, Action>
    GetRelativeAction =
    CompiledQuery.Compile((LinqToSqlDataContext db, int IDhand, int idp, bool isHero, string street, int br, string action) => (from r in dm.Actions
                                                                                                                             where (r.IDH == IDhand &&  r.Street.CompareTo(street)==0 && 
                                                                                                                             r.BetRound == br && r.Action1.CompareTo(action)==0 && r.Hero == isHero)
                                                                                                                             select r).Single());

0 个答案:

没有答案