所以我的网站遇到了一些速度问题,现在网上已有几周了。这是在discountasp.net上使用MySQL的MVC3站点。
我清理了网站的结构,并在我的本地计算机上运行得非常快,大约800-1100ms加载而没有缓存。奇怪的是,当我尝试访问现场时,我得到大约15-16秒的时间,有时冻结长达30秒。我关闭了web.config中的视图状态,现在本地加载时间为1.3秒(是的,奇怪的是稍微长一些),并且实时网站大部分时间都降到8-9秒,但这仍然很差。
没有针对我的情况提出这个问题(因为可能有一百万个原因网站变慢),我很好奇是否有任何原因导致本地Visual Studio服务器或IIS Express之间的加载时间如此之快而现场网站运行速度很慢。是不是任何代码明智或依赖性明智影响两者?我只是想不出会影响现场的原因而不是当地的原因。
有什么想法吗?
进一步的想法:我将网站设置为子文件夹,我正在使用IIS URL重写来映射到子域。我以前没有听说过这会导致问题,但这可能是个问题吗?
进一步更新:所以我上传了一个简单的页面,除了查询我没有缓存的最大表中的所有记录之外什么都不做。在我的本地机器上它平均大约110毫秒(这看起来仍然很慢......),而在现场网站上通常会超过两倍。如果我多次访问数据库以加载页面,那么这会严重影响页面加载时间。我仍然不确定问题是否与LINQ或MySQL或MVC一般(甚至可能是discountasp.net)。
答案 0 :(得分:0)
我曾遇到类似的问题,罪魁祸首是用户会话的初始化。事实证明,在每个请求上有很多对象正在读取/写入会话状态,但由于某种原因,这并没有影响我的本地计算机(我可能在本地启用了InProc
模式)。
因此,尝试向某些控制器添加属性,看看是否加快了速度:
[SessionState(SessionStateBehaviour.Disabled)]
public class MyController : Controller
{
另一方面,我进行了一些测试,令人惊讶的是,从每个请求 上的数据库 读取其中一些对象比读取它们更快,然后将它们置于会话状态。这有点意义,因为生产中的会话状态模式是SqlServer
,并且序列化/反序列化显然比仅仅为DataReader
的属性赋值更慢。另外,在部署新版本的程序集时,更改具有避免反序列化错误的良好副作用...
顺便说一句,即使992ms太多了,恕我直言。你可以使用输出缓存来削减一点吗?
答案 1 :(得分:0)
正如我上面提到的,我已经关闭了开发缓存,但仅限于我的本地计算机。我没有意识到有一个问题 WITH 为 LIVE 服务器启用了缓存,我从未关闭,因为我认为这有助于修复速度慢!这一切现在都有意义:))
修复我的缓存问题(IQueryable<>位于应该缓存整个表格的数据集顶部..> _>)我的速度增加了10倍。
感谢所有协助的人!