Domanda

Ho una webapp ospitata da una società di hosting pubblico, il sito non è ancora attivo e sto ancora facendo dei test con esso. Sto usando nHibernate con Windsor Castle Container per l'iniezione di dipendenza e il sito sembra di tanto in tanto rispondere molto lentamente. Ho contattato l'assistenza, ma hanno detto che è la mia app non i loro server. Qualcuno ha avuto problemi di prestazioni simili con i siti basati su ORM quando è ospitato presso le società di hosting pubblico?

Quale compagnia di hosting consiglieresti per i siti Web di hosting? Ho provato Godaddy ma non sono riuscito a usarli perché non consentono l'esecuzione di siti Web in piena fiducia, che a quanto pare è necessario per nHibernate.


Ho configurato nHibernate utilizzando i file di configurazione xml, aprendo le sessioni nel modo seguente:

using (ISession session = _sessionManager.OpenSession())
{         
ICriteria crit = session.CreateCriteria(typeof(Content));
   return crit.List();
}

Anche nel Application_Start ho il seguente codice:

private static WindsorContainer container;
if (container == null)
   {
     container = new WindsorContainer(new XmlInterpreter(filePath));
      Application[Constant.CastleWindsorAppKey] = container;
    }
È stato utile?

Soluzione

Non sai quanto è lenta la tua applicazione quando non la misuri. Sto usando un modulo http di temporizzazione durante lo sviluppo per notare velocemente grandi problemi di prestazioni. Quando una delle tue pagine si carica lentamente, dovresti usare un profiler per trovare il collo esatto della bottiglia. Sto usando NHibernate per il mio progetto attuale e non ho problemi di prestazioni con esso. Le mie query più complesse riguardano un grafico a oggetti complesso di 10 classi diverse e con i loro mapping NHibernate richiede 0,082 secondi per l'esecuzione. Il principale collo di bottiglia in quell'applicazione sta eseguendo il rendering del modello html aspx alla risposta (che richiede 0,5 secondi). I problemi di prestazioni sono spesso in accesso ai dati, ma non si può essere sicuri se non si misura.

Altri suggerimenti

Senza fare alcun tipo di strumentazione stai solo indovinando. Devi avvolgere un proxy di temporizzazione attorno alle tue chiamate db. Quindi registra quanto tempo impiega ogni chiamata. Se è qui che trascorri il tuo tempo, hai le informazioni necessarie per procedere.

Supponendo che tu stia utilizzando un ambiente di hosting condiviso, probabilmente non è la tua app. Ho visto fermare il codice perfettamente fine su un host condiviso. L'unica soluzione che conosco per i problemi di hosting condiviso è una sorta di host di app gestite, che ottiene un server privato virtuale (gestito o meno) o un box server dedicato. Questo tipo di servizio è più costoso dell'hosting condiviso.

Per quanto riguarda i consigli di hosting per Windows, mi dispiace di non averne.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top