0

我正在尝试将我们的本土 ORM 解决方案更改为 EntityFramework 5 的概念教授放在一起,而我遇到的第一个问题似乎是一个严重的阻碍。

EF5 出现,我们的盒子,执行标量 sql 操作的时间比 ad hock sql 长约 9 倍,但是当我查看生成的 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)

临时工:Select top 1 surveyId from Survey where deleted = 0

使用 EF5通过 Linq 加载surveyId:1 花费了2965.8625ms

通过 AdHock SQL 加载surveyId : 1耗时 384.8073ms

根据分析器,两者之间的持续时间对于 EF5 是 1 毫秒,而对于 ad hoc 是 0 毫秒。问题似乎出在EF5的审核注销事件中,大约需要 3 秒,而我的ad hoc sql对于相同的注销事件需要大约 0.6 秒。

是什么导致了 EF5 的巨大开销,我可以做些什么来减轻或解释这一点?

4

1 回答 1

0

每个应用程序域只进行一次初始化。根据模型的复杂程度以及第一次连接到数据库需要多长时间,它可能需要一点时间。您可以在我的博客上查看此评论,该评论简要讨论了Visual Studio 代码库上的初始化实体框架代码优先视图生成模板 - 评论 #249。还有这个页面:Entity Framework 5 的性能注意事项是您可能想要查看的内容。

于 2012-11-01T13:49:36.623 回答