【发布时间】:2013-12-24 21:01:25
【问题描述】:
EF 6.0.1,代码优先,两个表(父/子关系)。我正在使用该模型在 WebAPI 中查询数据并将 JSON 格式的数据(大约 3KB)返回到网站(我还测试了最简单的“.FirstOrDefault()”查询 - 在这里没有区别)。
第一次访问 WebAPI 很慢(大约 10 秒)。这与网站启动无关,此时网站已经预热。我通过 ADO 实现了相同的查询,第一次命中大约需要 1 秒。后续请求显示的 Entity Framework 损失要小得多(EF 约为 190 毫秒,ADO 约为 170 毫秒)。
我用本地 sql server 和 Azure SQL 对此进行了测试,结果相似。我分析了本地数据库:那里发生的事情不多,所有 0 Duration 请求。实体框架会产生额外的查询来检查迁移,但这些查询很精简。查看配置文件输出,我注意到所有数据库操作似乎都在大约一秒内发生,而完整的 EF 初始化过程需要 10 秒。为什么?
我已经在这里找到了一些提示,比如使用发布模式并打开“生成序列化”,但这并没有起到多大作用。在我开始实施明显的解决方法(提前初始化 EF 或只是删除 EF)之前,我希望还有一些其他的注意事项我应该检查一下。
【问题讨论】:
-
试试 Ngen,使用 6,0,2
-
我想补充一点,我在最近的一个项目中使用了 PetaPoco (toptensoftware.com/petapoco),还尝试了 NPOCO (github.com/schotime/NPoco),这是一个有一些改进的分支。与我在 EF 上所做的努力相比,我认为这轻而易举 - 但 EF 肯定还有其他功能。并且:根本没有启动延迟。如果您是“数据库优先”的开发人员,您应该尝试其中一种 Micro-ORM。 Dapper (github.com/StackExchange/dapper-dot-net) 功能比较多,项目比较活跃,但是我还没试过(因为功能比较多)。
标签: entity-framework