Подтвердить что ты не робот

Загрузка сайта ASP.NET MVC 3 чрезвычайно медленная

Я действительно не знаю, с чего начать этот вопрос, но сайт, над которым я работаю, временами имеет некоторые очень медленные загрузки страниц. Особенно после выполнения сборки, но не всегда. Обычно я должен обновить страницу 5-10 раз, прежде чем она на самом деле появится. Наверное, я пытаюсь понять, с чего именно начать.

ASP.NET MVC 3 Ninject AutoMapper Сущность Framework Code First 4.1 SQL Server 2008 Бритва

ОБНОВЛЕНИЯ

Что касается некоторых вопросов, он может делать эту длинную загрузку на каждой странице, но после того, как она загружает ее довольно быстро на всех страницах.

После публикации этого сообщения и получения ответов я запустил приложение, и он по-прежнему загружается и, вероятно, никогда не будет загружаться, если я не перезагружу его в браузере.

Нет кеширования, а модели EF не огромны.

Я использую Razor и Visual Studio 2010 с 6 ГБ памяти и I7-процессором.

Я использую IIS Express и веб-сервер по умолчанию при отладке. Он также делает это на IIS7 на главном сервере.

Я могу посмотреть в MVC Profiler и Glimpse, чтобы узнать, что я могу найти.

Ниже приведен код, который запускается, когда он попадает на главную страницу. Я бы сказал, что он никогда не загружается, когда я впервые запускаю сервер. Я поставил точку разрыва в var model, которая никогда не попадает. Если я перезагружаю страницу, то она делает.

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();
        }
    }
4b9b3361

Ответ 1

Я бы начал с проверки того, какие тайм-ауты установлены в IIS для того, чтобы процесс перерабатывался сам.

Я также очень большой поклонник MVC Mini-Profiler, который может показать вам, как долго различные части вашей страницы загружаются берут, определенно взгляните на это.

Edit:

Стоит отметить, что

Ответ 2

Похоже, что это может быть проблемой при утилизации IIS AppPool, если вы переживаете это после сбоев или после периодов бездействия.

Чтобы помочь с тайм-аутами AppPool, вы можете использовать пакетный файл, который я создал, чтобы помочь устранить проблему.

Это не решит проблему для вас после новых сборок, потому что ваше приложение ASP.NET MVC должно быть скомпилировано JIT при первом запуске. Если вы действительно хотите устранить эту проблему, вы можете использовать предварительную компиляцию ASP.NET.

Ответ 4

Это зависит от того, что произошло в вашем предыдущем запуске, иногда, если вы выкидываете ошибку и не очищаете ее, тогда у вас будут проблемы с запуском приложения. Это помогает перезапускать браузер каждый раз, когда вы строите, если была ошибка.

Однако это может быть проблемой кэширования. Возможно, ваша база данных кэшируется из-за плохо поддерживаемого контекстного размещения. Это приведет к тому, что поисковые запросы будут выполняться быстрее и быстрее, поскольку они встречаются на страницах. Убедитесь, что вы всегда вызываете .dispose(), когда выполняете транзакции с базой данных.

Ответ 5

смешно - я заметил что-то подобное однажды с единством и mvc, но проблема, которую я считаю, разрешила сама. Вы также можете попробовать профайлер муравьев, чтобы узнать, находится ли проблема вне MVC.

Если вы позволяете сидеть там (без запроса более 5 раз), что происходит? Пусть запускается один запрос - ЛЮБОЙ из вашего кода попал? (регистрация журнала log4net, nlog и т.д.) для запуска application_start и т.д., чтобы узнать, вызван ли какой-либо код после компиляции.