我有一个带有EF模型的Web应用程序,我最初使用SQL Server 2008后端设计。后来,我决定使用SQL CE来实现可移植性,所以我将模型转换为目标Sql CE 4.0。但是,我在运行此应用程序时遇到了严重的性能问题。
例如,我在代码中有一部分从数据库中检索实体:
Trace.Write("Retrieving node from database", "Application");
var name = value.ToString();
var node = DataContext.Entities.Nodes
.SingleOrDefault(n => n.Name == name);
Trace.Write("Node retrieved from database ", "Application");
当我查看跟踪信息(trace.axd)时,这些代码行需要0.6秒!!
跟踪信息
Category Message From First(s) From Last(s)
Application Retrieving node from database 0.00057591118424269 0.000576
Application Node retrieved from database 0.595122564460008 0.594547
这在我的应用程序中随处可见,我按名称查询。
有什么想法吗?我猜我必须在列上定义一个索引,但是我如何在EF模型中做到这一点?
编辑: Gramma 编辑2:标题中的拼写
答案 0 :(得分:2)
我在这里有一些带有一些性能建议的示例,使用global.asax:http://erikej.blogspot.com/2011/01/entity-framework-with-sql-server.html以及其他性能提示:http://blogs.msdn.com/b/wriju/archive/2011/03/15/ado-net-entity-framework-performance-tips.aspx
答案 1 :(得分:1)
我过去曾使用过旧版本的SQL CE,而且我发现一个主要的瓶颈就是打开连接。
您可以尝试自己管理开放连接,并手动将其传递到数据上下文中(而不是允许上下文自动管理连接。)