【发布时间】:2014-06-03 15:57:53
【问题描述】:
我将使用实体框架代码优先方法,发现仅获取 350 条左右记录的查询大约需要 8 秒。我怎样才能加快速度?这个 Universe 或实体框架是否运行缓慢?
实体框架 5.0 U2.Data.Client 1.2.1 .Net 框架 4.5.1
RAMContext 看起来像这样:
public class RAMContext : DbContext
{
public RAMContext() { }
public DbSet<Policy> Policies { get; set; }
}
这是获取实体的代码:
List<Policy> policies = null;
Database.SetInitializer<RAMContext>(null);
using (RAMContext context = new RAMContext())
{
policies = (from p in context.Policies
where p.AGENT_NO == id
select p).ToList();
}
这是连接字符串:
<add name="RAMContext" connectionString="Database=<account>;UserID=<userid>;Password=<pwd>;Server=<server>;Pooling=false;ServerType=universe;ConnectTimeout=360;SleepAfterClose=300;PersistSecurityInfo=true" providerName="U2.Data.Client" />
AGENT_NO 已编入索引,从 TCL 直接在数据库上运行的相同查询几乎立即完成。
已编辑 在 Rajan 的 cmets 之后,我尝试了以下方法:
policies = (from p in context.Policies
where p.AGENT_NO == id
select new PolicyModel
{
//Type = PolicyModel.Types)StringValue.GetEnumValueByStringValue(typeof(PolicyModel.Types), p.TYPE),
Insured = p.INSURED,
City = p.CITY,
State = p.STATE,
CancelDate = p.CANC_DT
//IsNew = PickHelper.PickYNNullToBool(p.NEW_RENEW_FLG)
});
我现在可以在 3 秒内做出这个选择,它出现了。我还在 AGENT_NO 上重建了索引,我相信这有很大帮助。
尝试您的第二个建议,我得到以下异常:
U2.Data.Client.dll 中发生了“System.IndexOutOfRangeException”类型的异常,但未在用户代码中处理
补充资料:
此 U2ParameterCollection 的索引 -1 无效,Count=0。
【问题讨论】:
-
与对数据库运行相同查询相比如何?
AGENT_NO上有索引吗? -
能否请您只尝试几列(int、string)?例如: var q = (from p in ctx.Customers where p.CUSTID >0 select new { ID = p.CUSTID, NAME=p.FNAME });你觉得有什么不同吗?
-
你能再试试看吗?请运行以下代码(不带 EF)。例如。 // 取开始时间 U2Command cmd = con.CreateCommand(); cmd.CommandText = "SELECT ID, FNAME FROM CUSTOMER";数据集 ds = new DataSet(); U2DataAdapter da = 新 U2DataAdapter(cmd); da.填充(ds); //取结束时间
-
我不太了解宇宙,甚至不知道是否有包含列的索引,但如果有的话,这绝对是一个想法,作为一般的数据库原则。因此,也许可以对某些索引列进行排序(即使它完全是任意的)。 Linq 本身并没有任何令人担忧的地方,但如果
List实际上不是必需的(您不会多次点击它),您可以跳过它并遍历结果。 -
您的 SQL 语法是什么?它是否包含“@ASSOC_ROW”?尝试将“NamedParameters=false”放在连接字符串中。如果没有解决,请将日志文件发送给我。最近我在 U2 Toolkit for .NET v2.1.0 中解决了这个问题。我们将很快发布 v2.1.0。我认为你错过了 BETA。请阅读:blog.rocketsoftware.com/2014/05/…blog.rocketsoftware.com/2014/05/…
标签: c# linq entity-framework u2netdk