我真的不知道从哪里开始这个问题,但我正在处理的网站有时会有一些非常慢的页面加载。特别是在完成构建之后,但并非总是如此。我通常必须在实际出现之前刷新页面5-10次。我想我正试图看看我应该从哪里开始看。
ASP.NET MVC 3 Ninject AutoMapper 实体框架代码第一4.1 SQL Server 2008 剃刀
更新
关于一些问题,它可以在每个页面上进行长时间加载,但是在所有页面上加载它相当快。
发布此内容并获得回复后,我启动了应用程序并且仍在加载,除非我在浏览器上单击重新加载,否则可能无法加载。
没有缓存,EF模型也不大。
我正在使用带有6 GB内存和I7处理器的Razor和Visual Studio 2010。
我在调试时使用IIS Express和默认Web服务器。它也在主服务器上的IIS7上执行此操作。
我可以查看MVC Profiler和Glimpse以了解我能找到的内容。
下面我有一些代码,当它到达主页时运行。我会说它在我第一次启动服务器时从不加载。我在var模型上设置了一个永不受到打击的断点。如果我重新加载页面,那就确实如此。
public ActionResult Index()
{
var model = new HomeViewModel();
model.RecentHeadlines = _headlineService.GetHeadlines(1, Config.RecentHeadlinesPageSize, string.Empty);
return View(model);
}
下面是我的datacontext设置。
public class DatabaseFactory : Disposable, IDatabaseFactory
{
private DataContext _dataContext;
public DataContext Get()
{
return _dataContext ?? (_dataContext = new DataContext());
}
protected override void DisposeCore()
{
if (_dataContext != null)
_dataContext.Dispose();
}
}
public class Disposable : IDisposable
{
private bool isDisposed;
~Disposable()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (!isDisposed && disposing)
{
DisposeCore();
}
isDisposed = true;
}
protected virtual void DisposeCore()
{
}
}
public class UnitOfWork : IUnitOfWork
{
private readonly IDatabaseFactory _databaseFactory;
private DataContext _dataContext;
public UnitOfWork(IDatabaseFactory databaseFactory)
{
_databaseFactory = databaseFactory;
}
protected DataContext DataContext
{
get { return _dataContext ?? (_dataContext = _databaseFactory.Get()); }
}
public void Commit()
{
DataContext.Commit();
}
}
答案 0 :(得分:14)
我首先检查IIS中设置的超时时间,以便进程自行回收。
我也是MVC Mini-Profiler的忠实粉丝,可以准确地向您显示网页各个部分的加载时间,请务必查看。
编辑:
值得注意的是,Glimpse project这些天也很适合这项任务。
答案 1 :(得分:6)
如果您在构建之后或在不活动时段之后遇到IIS AppPool回收可能会出现问题。
要帮助处理AppPool超时,您可以使用我创建的batch file来帮助缓解此问题。
在新版本之后,这不会解决您的问题,因为您的ASP.NET MVC应用程序需要在首次运行时进行JIT编译。如果您真的渴望消除该问题,可以使用ASP.NET precompliation。
答案 2 :(得分:1)
尝试Glimpse或使用ASP.NET Tracing。
如果您通过precompile your views使用Razor视图引擎,也可以Razor Single File Generator for MVC。
答案 3 :(得分:0)
这取决于您之前运行中发生的情况,有时如果您抛出错误而未清除错误,那么运行应用程序时会遇到问题。如果出现错误,每次构建时都有助于重新启动浏览器。
但是,这可能是缓存问题。由于上下文处理维护不当,您的数据库可能正在缓存。这将导致查找在页面中遇到越来越快的速度。确保在完成数据库事务后始终调用.dispose()。
答案 4 :(得分:0)
如果你让一个请求坐在那里(没有请求5次以上)会发生什么? 让一个请求运行 - 您的代码是否被命中? (设置日志log4net,nlog等)运行application_start等,以查看编译后是否有任何代码被调用。