【发布时间】:2015-06-18 03:07:48
【问题描述】:
我知道这个问题被问了太多次,但我无法从所问的问题中找出解决方案。
我是 Entity Framework 的新手,我使用 Entity Framework 6 和 Code First 方法为我的网站开发了一个小型 CMS 面板。我的问题是,第一次运行时网站真的很慢(这是我目前正在测试的网站 www.oakwoodpawnshop.ca),加载需要 30 多秒。 第一次加载后,加载其他页面大约需要一秒钟。我从 PageSpeed 洞察中得到了 89/100,我所有的图像 /js /css 文件都被最小化了,并且做了一些其他的前端优化,所以我知道我的问题出在 EF 上。我有一个大约 3 年前只使用 LINQ 构建的网站,没有数据库优化或 html/图像优化,它在大约 3 秒内打开。
我使用 Entity Framework Power Tools 预先生成了视图,并且我的代码中没有任何 Include 方法。我在 .toList() 函数之前过滤了我的查询。我的代码或数据库优化可能有问题,但我无法通过我的研究提出解决方案,因为这个领域对我来说是新的。
我发现一篇用我的母语写的文章要求有同样问题的人在命令提示符下运行一些代码,看看问题是否与网络设置有关。
这些是命令提示符的行:
1 - netsh int ip 重置 a.txt
2 - netsh winsock 重置
3 - netsh winhttp 重置代理
4 - netsh advfirewall 重置
5 - ipconfig /flushdns
6 - 重新启动计算机并再次检查。
当我完成这些并返回网站时,整个网站在 3 秒内打开。过了一会儿,它又开始有 30 多秒的启动时间。显然我不能在每个人的计算机上运行这些命令,但我迷路了,我不知道为什么要花这么长时间才能启动。
这是我使用的方法的一个示例:
public List<Categories> GetCategories()
{
List<Categories> c = db.Categories.Where(x => x.TopCategoryId == 0).OrderBy(x => x.CatOrder).ToList();
return c;
}
我创建了自定义方法来获取我的数据(这样我可以更轻松地使用它们),在一个“工人”类下将我的所有方法收集到一个类中。会不会是这个问题?
我很乐意提供您需要的任何更多信息,我已经处理了大约一个月,但没有运气,所以我绝望地寻找答案,否则我将不得不重新创建整个应用程序EF,因为客户不会等待打开时间为 +30 秒的网站。
提前感谢您的所有建议!
【问题讨论】:
-
问题很可能与迁移有关。您是否仍在积极处理您必须进行迁移的应用程序?每次应用程序第一次启动时,都必须检查 __migrationHistory;如果您的应用不再主动更改,那么禁用迁移或将基线迁移从空数据库中的单个当前迁移应该会有所帮助。
-
嗨@Claies,非常感谢你这么快:) 我只在内容方面处理我的应用程序,所以很长时间以来数据库都没有变化。我删除了我的迁移历史表和迁移文件夹并再次发布了网站,请问您是否可以检查它是否已解决?我现在看起来更快了
标签: c# performance entity-framework code-first startup