Sql 为什么EF5的审核注销事件需要约3秒的时间?
我正试图整理出一套将我们自己开发的ORM解决方案更改为EntityFramework5的概念,我遇到的第一个问题似乎是一个严重的问题 EF5似乎比ad hock sql执行标量sql操作的时间要长约9倍,但当我查看生成的sql代码时,sql本身似乎编写得相当好,运行速度也很快 我的C代码适用于以下两种情况:Sql 为什么EF5的审核注销事件需要约3秒的时间?,sql,entity-framework,.net-4.5,Sql,Entity Framework,.net 4.5,我正试图整理出一套将我们自己开发的ORM解决方案更改为EntityFramework5的概念,我遇到的第一个问题似乎是一个严重的问题 EF5似乎比ad hock sql执行标量sql操作的时间要长约9倍,但当我查看生成的sql代码时,sql本身似乎编写得相当好,运行速度也很快 我的C代码适用于以下两种情况: int surveyId = (from survey in upsEntities.Surveys where !survey.Deleted select survey.SurveyI
int surveyId = (from survey in upsEntities.Surveys where !survey.Deleted select survey.SurveyID).First();
Debug.WriteLine("Loading surveyId : {0} through Linq took {1}ms using EF5", surveyId,
sw.Elapsed.TotalMilliseconds);
sw.Restart();
string sql = "Select top 1 surveyId from Survey where deleted = 0";
object val = SMSDataManager.Instance.DataAccessManager.ExecuteScalar(sql);
Debug.WriteLine("Loading surveyId : {0} through AdHock SQL took {1}ms using OrmDataManager", val,
sw.Elapsed.TotalMilliseconds);
SQL输出:
EF5:
Adhock:从已删除的调查中选择前1个调查ID=0
加载测量ID:1到Linq使用EF5耗时2965.8625ms
通过AdHock SQL加载surveyId:1耗时384.8073ms
根据分析工具,EF5和ad hock之间的持续时间分别为1ms和0ms。问题似乎出在EF5的审核注销事件中,耗时约3秒,而我的ad hock sql则为同一注销事件耗时约6秒
是什么导致了EF5如此巨大的开销,我能做些什么来减轻或解释这一点?每个应用程序域只进行一次初始化。根据模型的复杂程度以及第一次连接到数据库所需的时间,可能需要一些时间。您可以在我的博客上看到这条评论,其中简要讨论了初始化。还有这个页面:是您可能想要查看的内容。Linq查询是上下文中的第一个查询吗?您所观察到的可能是运行第一个查询时发生的某些初始化的结果。这是上下文中的第一个查询,如果我再复制查询两次,我会注意到接下来的两个查询速度非常快,大约为15毫秒。然而,每次我初始化一个上下文时,都会有整整3秒钟的时间,这对我来说是一段很长的时间。我的ad hock查询启动了一个新连接,但仍低于500毫秒。每个应用程序域只进行一次初始化。根据模型的复杂程度以及第一次连接到数据库所需的时间,可能需要一些时间。你可以在我的博客上看到这个关于初始化的评论。这也是你可能想看的东西。你能把它写成一个答案的形式,这样我就可以给你评分了吗?你最后的评论有效地回答了我的问题。每个应用程序域一次。。。我修改了我的单元测试来证明这一点。
SELECT TOP (1)
[Extent1].[SurveyID] AS [SurveyID]
FROM [dbo].[Survey] AS [Extent1]
WHERE [Extent1].[Deleted] <> cast(1 as bit)