我正试图将我们自己开发的ORM解决方案转换为EntityFramework 5,而我遇到的第一个问题似乎是一个严重的节目停播。
我们的框中的EF5似乎要比ad hock sql长9倍来执行标量sql操作,但是当我查看生成的sql代码时,sql本身似乎编写得相当好,并且运行得很快。
我的两个C#代码:
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:
SELECT TOP (1)
[Extent1].[SurveyID] AS [SurveyID]
FROM [dbo].[Survey] AS [Extent1]
WHERE [Extent1].[Deleted] <> cast(1 as bit)
Adhock:Select top 1 surveyId from Survey where deleted = 0
加载surveyId :1通过Linq使用2965.8625ms使用EF5 加载surveyId :1通过AdHock SQL取384.8073ms
根据分析器的说法,两者之间的持续时间是1ms ( EF5 ),0ms ( ad )。问题似乎在于审核注销事件for EF5,花费了~3秒,,其中ad hock sql占用相同注销事件的~6秒。
是什么导致了EF5的巨大开销,我能做些什么来减轻或解释这一点呢?
发布于 2012-11-01 13:49:36
每个应用程序域只进行一次初始化。根据模型的复杂程度以及第一次连接到数据库所需的时间,它可能需要一些时间。您可以在我的博客上看一下这个评论,它简要地讨论了初始化实体框架代码第一次查看Visual代码库上的生成模板-注释#249。另外,这个页面:实体框架的性能考虑5是您可能想要查看的内容。
https://stackoverflow.com/questions/13167048
复制相似问题