Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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
C# 使用实体框架加载子实体时性能不佳_C#_Asp.net_Linq_Entity Framework - Fatal编程技术网

C# 使用实体框架加载子实体时性能不佳

C# 使用实体框架加载子实体时性能不佳,c#,asp.net,linq,entity-framework,C#,Asp.net,Linq,Entity Framework,我正在用实体框架(代码优先)构建一个ASP.Net应用程序,并实现了一个存储库模式 我的数据库中只有两个表。一个称为传感器,另一个称为测量点(仅包含时间戳和值)。传感器可以有多个测量点。目前,我有5个传感器和大约15000个测量点(每个传感器大约3000个点) 在我的一个MVC控制器中,我执行以下命令(获取传感器的最新测量点) 只需约200毫秒即可执行,因此时间会花在其他地方 我在VisualStudioProfiler的帮助下分析了代码,发现导致延迟的调用是 System.Data.Objec

我正在用实体框架(代码优先)构建一个ASP.Net应用程序,并实现了一个存储库模式

我的数据库中只有两个表。一个称为
传感器
,另一个称为
测量点
(仅包含
时间戳
)。传感器可以有多个测量点。目前,我有5个传感器和大约15000个测量点(每个传感器大约3000个点)

在我的一个MVC控制器中,我执行以下命令(获取传感器的最新测量点)

只需约200毫秒即可执行,因此时间会花在其他地方

我在VisualStudioProfiler的帮助下分析了代码,发现导致延迟的调用是

System.Data.Objects.Internal.LazyLoadBehavior.<>c_DisplayClass7`2.<GetInterceptorDelegate>b_1(!0,!1)
System.Data.Objects.Internal.LazyLoadBehavior.c_DisplayClass7`2.b_1(!0,!1)
所以我想这与延迟加载有关。我是否必须接受这样的表现,或者我是否可以做出改进?是按时间排序导致性能下降吗?如果是,我有什么选择

更新:
我已经更新了代码以显示传感器的来源

如果该查询正在运行,则会将所有3000个点加载到传感器的内存中。尝试直接在DbContext上运行查询,而不是使用navigation属性,然后查看性能差异。您的开销可能来自不需要加载的2999个点。

这样做的目的是将整个子集合加载到内存中,然后对加载的(appx 3000)子集合执行.First()linq查询

如果您只想要最新的,请使用以下选项:


context.MeasurePoints.OrderByDescending(measurePoint=>measurePoint.TimeStamp).First()

这是仅第一次调用的执行时间吗?什么类型的“传感器”对象?它是
DbContext
?不是,它是从
DbContext
中提取的
Sensor
对象。我更新了我的问题以反映这一点谢谢。这要快得多。
SELECT 
[Extent1].[MeasurePointId] AS [MeasurePointId], 
[Extent1].[Value] AS [Value], 
[Extent1].[TimeStamp] AS [TimeStamp], 
[Extent1].[Sensor_SensorId] AS [Sensor_SensorId]
FROM [dbo].[MeasurePoint] AS [Extent1]
WHERE ([Extent1].[Sensor_SensorId] IS NOT NULL) AND ([Extent1].[Sensor_SensorId] = @EntityKeyValue1)
System.Data.Objects.Internal.LazyLoadBehavior.<>c_DisplayClass7`2.<GetInterceptorDelegate>b_1(!0,!1)