Il mio Asp.net MVC funziona come un dodo! Qualsiasi raccomandazione

4

Di seguito è riportato l'URL per il mio sito web, link . Se visiti qualsiasi link di categoria, lo vedrai molto lento. Ad esempio, se visiti il link , verrà visualizzato un ritardo prima che le sottocategorie vengano caricate.

Questa è solo la prima fase e ho appena aggiunto alcune categorie al database e non molto. Se funziona così all'inizio, cosa succederà quando comincio ad aggiungere prodotti.

Sto utilizzando il primo approccio al codice di Entity Framework. Di seguito è riportato il codice per una delle azioni che recupera l'elenco di categorie.

PriceCompareEntity pe = new PriceCompareEntity();
    //
    // GET: /Store/
public ActionResult Section(string id)
{
    if (!string.IsNullOrEmpty(id))
    {
        var catsAndSub = pe.Categories.Where(cat => cat.Name == id).FirstOrDefault();
        if (catsAndSub == null || catsAndSub.ParentCategoryId != null)
        {
            return View("NoSuchRootCat");
        }
        else
        {
            ViewBag.Title = catsAndSub.MetaTitle;
            ViewBag.Description = catsAndSub.MetaDescription;
            ViewBag.Keywords = catsAndSub.MetaKeywords;
            return View(catsAndSub);
        }
    }
    else
    {
        return View("NoSuchRootCat");
    }
}

Sono molto preoccupato e un po 'deluso. Dopo tanto duro lavoro da uno o due mesi, i risultati non sono buoni. Se le cose saranno così lente, il mio intero progetto affonderà. Non riesco a immaginare quanto sarà lento se aggiungo qualche centinaia di prodotti al sito. Nessuno si preoccuperà di visitare un sito web dodo.

Ho fatto qualcosa di sbagliato nello sviluppo? E cosa posso fare per ottenere le cose giuste e dritte. Mentre navigavo in rete, mi sono imbattuto nella cache del web e altre cose, ma sono molto avanzate e richiedono un po 'di apprendimento. Inoltre, il mio sito web non è un Facebook o SO con milioni di utenti, quindi andare avanti nell'argomento sembra molto diverso e ci vorrà un sacco di tempo per fare le cose.

Aggiorna

Ho rimosso il sito Web, quindi i collegamenti potrebbero non mostrare il contenuto originale.

    
posta Pankaj Upadhyay 23.12.2011 - 14:50
fonte

3 risposte

4

In risposta al commento di Matthieu, il problema probabilmente non è Linq, poiché il costo aggiuntivo per l'utilizzo delle query di Linq è banale. Il collo di bottiglia delle prestazioni deve essere una delle poche opzioni:

  • La query del database generata da EntityFramework è inefficiente e causa un collo di bottiglia alle prestazioni. Attivare la registrazione SQL e visualizzare le query di categoria inviate al database. Se sembrano essere a posto, provare a eseguire un piano esplicativo su di essi per informazioni più dettagliate su come il motore di database sta interpretando la query. Forse il tuo database richiede statistiche aggiornate o più indici?

  • Potrebbe essere un hardware sottodimensionato. Guarda attentamente le risorse di sistema e assicurati che siano sufficienti.

  • Hai escluso il tempo di attesa del primo caricamento di ASP.NET? Quando si accede alle pagine ASP.NET per la prima volta dopo una distribuzione, IIS li compilerà su richiesta. Questa compilazione di pagine può richiedere un po 'di tempo, ma si verifica solo dopo l'implementazione o la modifica delle pagine.

EDIT: da Wikipedia su SQL Server CE - Microsoft SQL Server Compact (SQL CE) è un database relazionale compatto prodotto da Microsoft per applicazioni eseguite su dispositivi mobili e desktop. anche I database SQL CE risiedono in un unico file .sdf, [12] che può avere dimensioni fino a 4 GB

Quindi fondamentalmente i file SDF sono destinati ad essere utilizzati come datastore relazionali per applicazioni desktop stand-alone e dispositivi embedded. Il processo che lo sta utilizzando condivide lo stesso pool di memoria, il che significa che un processo deve bloccare il file per utilizzarlo. Ciò significa che solo un singolo utente potrebbe utilizzare il tuo sito web contemporaneamente.

Sulla base di tutte queste informazioni, i file SDF non sono chiaramente destinati alle applicazioni Web.

    
risposta data 23.12.2011 - 15:13
fonte
3

I campi della tabella nella tua clausola where sono indicizzati? Non si desidera cercare nelle tabelle i campi di testo (varchar) quando è possibile utilizzare gli indici. Le chiavi primarie sono probabilmente gestite dal framework.

    
risposta data 23.12.2011 - 16:57
fonte
0

È molto difficile da dire. Hai provato a utilizzare qualche profiler per vedere qual è il collo di bottiglia?

EQATEC (gratuito): link
ANTS (commerciale): link

    
risposta data 23.12.2011 - 17:05
fonte

Leggi altre domande sui tag