ASP.NET MVC 3站点加载速度极慢

Mik*_*ynn 20 performance ninject entity-framework-4.1 asp.net-mvc-3

我真的不知道从哪里开始这个问题,但我正在处理的网站有时会有一些非常慢的页面加载.特别是在完成构建之后,但并非总是如此.我通常必须在实际出现之前刷新页面5-10次.我想我正试图看看我应该从哪里开始看.

ASP.NET MVC 3 Ninject AutoMapper实体框架代码第一个4.1 SQL Server 2008 Razor

更新

关于一些问题,它可以在每个页面上进行长时间加载,但是在所有页面上加载相当快.

发布此并获得您的回复后,我启动了应用程序,它仍在加载,除非我在浏览器上单击重新加载,否则可能无法加载.

没有缓存,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);
        }
Run Code Online (Sandbox Code Playgroud)

下面是我的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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

scl*_*son 14

我首先检查IIS中设置的超时时间,以便进行回收.

我也是MVC Mini-Profiler的忠实粉丝,它可以准确地向您展示页面加载的各个部分需要多长时间,绝对可以看看它.

编辑:

值得注意的是,目前Glimpse项目对于这项任务也很有用.


Aar*_*web 6

听起来像IIS AppPool回收可能是一个问题,如果您在构建之后或在不活动时间之后遇到它.

要帮助处理AppPool超时,您可以使用我创建的批处理文件来帮助缓解此问题.

在新版本之后,这不会解决您的问题,因为您的ASP.NET MVC应用程序需要在首次运行时进行JIT编译.如果您真的渴望消除该问题,可以使用ASP.NET预补偿.