我正在尝试从具有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时)。
你注意到了什么问题吗?
编辑:
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());