ASP.NET MVC 3 de Chargement du Site Est Extrêmement Lent
Je ne sais vraiment pas par où commencer avec cette question, mais le site que je suis en train de travailler times a vraiment ralentir le chargement de la page. Surtout après avoir fait un build, mais pas toujours. J'ai l'habitude d'actualiser la page 5 à 10 fois avant de réellement se lève. Je suppose que je suis en train de voir où exactement je devrais commencer à chercher.
ASP.NET MVC 3
Ninject
AutoMapper
Entity Framework Code First 4.1
SQL Server 2008
Rasoir
MISES à jour
Concernant certaines questions, il peut faire ce long chargement sur chaque page, mais après il charge son assez rapide sur toutes les pages.
Après cette annonce et l'obtention de vos réponses, j'ai commencé à l'application et il est toujours en cours de chargement et probablement ne sera jamais la charge à moins que je clique sur recharger sur le navigateur.
Pas de mise en cache, et l'EF modèles ne sont pas énormes.
Je suis en utilisant la lame de Rasoir et Visual Studio 2010 avec 6 GO de mémoire et un processeur I7.
Je suis à l'aide de IIS Express et le serveur web par défaut lors du débogage. Il le fait aussi sur IIS7 sur le serveur principal.
Je peut regarder dans le MVC Profiler et Aperçu pour voir ce que je peux trouver.
Ci-dessous j'ai un code cela fonctionne quand il frappe la page d'accueil. Je dirais qu'il ne se charge jamais quand j'ai démarrer le serveur. J'ai mis un point d'arrêt au modèle de la var qui n'est jamais touché. Si je recharge la page, alors il n'.
public ActionResult Index()
{
var model = new HomeViewModel();
model.RecentHeadlines = _headlineService.GetHeadlines(1, Config.RecentHeadlinesPageSize, string.Empty);
return View(model);
}
Ci-dessous est mon datacontext le programme d'installation.
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();
}
}
- Besoin d'un peu plus de détails. Est-ce pour frapper la première page? Chaque page? Seulement certaines pages? Il arrive régulièrement ou sporadiquement?
- Quelle est la taille de votre modèle EF? Est-il de la mise en cache dans votre application? C'est surtout après la construction ou toujours lorsque vous accédez à l'application après la construction, pour la première fois (redémarrage de l'application)?
- Il pourrait aussi être due à une machine lente. De combien de mémoire avez-vous? Combien de cœurs de PROCESSEUR? Est-ce un ordinateur portable ou un poste de travail?
- Ce Moteur d'Affichage utilisez-vous?
Vous devez vous connecter pour publier un commentaire.
Je commencerais par vérifier ce que les délais sont fixés dans IIS pour le processus de recyclage lui-même.
Je suis aussi un très grand fan de la MVC Mini-Profiler qui pourrait vous montrer exactement combien de temps les différentes parties de votre page de chargement prenez, certainement prendre un coup d'oeil.
Edit:
Il est intéressant de noter que la Aperçu du projet est également idéal pour cette tâche, ces jours-ci.
Sonne comme il pourrait être un problème avec IIS AppPool recyclage si vous êtes confronté il après avoir construit ou après les périodes d'inactivité.
Pour aider avec des délais d'attente du pool d'applications que vous pouvez utiliser un fichier de commandes j'ai créé pour vous aider à atténuer le problème.
Qui ne permettent pas de résoudre le problème pour vous, après que de nouvelles builds parce que votre ASP.NET MVC de l'application doit être compilé par JIT lors de la première exécution. Si vous êtes vraiment désireux d'éliminer ce problème, vous pouvez utiliser ASP.NET precompliation.
Essayer Aperçu ou de l'utilisation ASP.NET Traçage.
Vous pouvez également précompiler votre point de vue si vous utilisez le moteur de vue Razor via Rasoir Seul Générateur de Fichier pour MVC.
Cela dépend de ce qui s'est passé dans votre exécution précédente, parfois, si vous jetez une erreur et n'est pas clair, alors vous aurez des problèmes de fonctionnement de l'application. Il permet de redémarrer le navigateur chaque fois que vous créez s'il y avait une erreur.
Toutefois, cela pourrait être un problème de mise en cache. Il est possible que votre base de données est mise en cache en raison de mal entretenues contexte de l'élimination. Ce serait la cause de la recherches plus rapidement et plus rapide, car ils ont été rencontrés dans les pages. Assurez-vous de toujours l'appeler .dispose() lorsque vous avez terminé votre base de données de transactions.
drôle - j'ai remarqué quelque chose de similaire une fois avec l'unité et de la mvc, mais le problème je crois résolu de lui-même. Vous pouvez également essayer les fourmis profiler pour voir si le problème est à l'extérieur de la MVC.
Si vous laissez une seule demande de rester là (sans demander+ de 5 fois) ce qui se passe?
Laisser une seule demande d'exécution est l'un de vos code frapper? (configuration de la journalisation de log4net, nlog, etc) pour exécuter application_start, etc pour voir si le code est appelé après la compilation.