Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架物化nvarchar数据需要很长时间_Entity Framework - Fatal编程技术网

Entity framework 实体框架物化nvarchar数据需要很长时间

Entity framework 实体框架物化nvarchar数据需要很长时间,entity-framework,Entity Framework,我有一个linq查询,用于从数据库加载地址数据。这是一个更大的linq声明的一部分。 其中一个选择字段具有 select new GridDetail { ....... LocationAddress = p.Location.Address.Address1 + " " + p.Location.Address.Address2 + ", " + p.Location.Address.City + ", " + p.Locat

我有一个linq查询,用于从数据库加载地址数据。这是一个更大的linq声明的一部分。 其中一个选择字段具有

    select new GridDetail
      {
        .......
        LocationAddress = p.Location.Address.Address1 + " " +        p.Location.Address.Address2 + ", " + p.Location.Address.City + ", " + p.Location.Address.StateProvince.Name,
        .............
      };
根据SQLProfiler,生成的查询大约在100ms内运行。但是query.ToList语句需要4秒钟才能执行

我尝试在select语句中逐个删除字段,并意识到当我注释掉上面的语句时,查询将在不到1秒的时间内执行

生成的SQL没有以N+1方式加载数据。所有数据都在一次快照中检索。LocationAddress statment中的每个字段都映射到nvarchar250 此外,根据.Net的秒表计时和SQLProfiler的查询计时,从LINQ生成查询没有延迟

对于1条记录,在select语句中带有LocationAddress的.ToList的执行时间为3秒,对于3000多条记录,执行时间为4秒。这使我认为它与行数无关,因此消除了分页作为一种解决方案

专家们,你能帮我更快地加载这些数据吗

提前感谢:

编辑:

根据@raderick的评论,将连接部分从Query移动到C,速度从3秒下降到1.5秒


现在,LocationAddress less查询在800ms内运行,LocationAddress在1.5秒内运行。。。请注意,这是针对3000条记录的。。对于1条记录,查询将在1.2秒内运行

您可能必须加载数据而不进行连接,并在ToList检索到数据后进行连接。物化很难控制,因此,如果可以的话,您必须摆脱复杂的物化,在将数据转换为所需对象之前使用投影加载数据。@raderick:太好了!。。这使时间从3秒降至1.5秒。。但无地址查询仍需0.8秒。@raderick希望您能将此作为答案回答否?这是一个很好的发现:@Raghav你能用最少的代码重现这个问题吗?我创建了一个包含4个表的小测试应用程序,并通过物化(包括字符串连接)查询获取所有表,第一次启动后,查询速度非常快。我们可能在这里遗漏了一些东西。@Sampath我感觉这不是这里最大的优化案例,并将等待更多信息,简单测试应用程序没有确认这个问题,可能是我们在这里寻找的其他问题。我将尽一切可能尽快发布答案: