Ho sviluppato un'applicazione Web un'applicazione Web standard per consentire agli utenti di visualizzare e aggiornare un set di dati da un database SQL.Connessione al database lenta dall'applicazione Web di Azure
L'applicazione Web utilizza un lato client AngularJS che interagisce con il server Web tramite chiamate API MVC Web per recuperare e aggiornare i dati nel database. Il codice lato server è scritto in C# utilizzando .NET 4.5 e utilizza Entity Framework v6.0 per accedere al database.
L'applicazione Web è ospitata in un'app Web di Azure. Il database è il database SQL di Azure.
Il problema è che quando l'applicazione non è stata utilizzata per circa 10-15 minuti, quindi viene utilizzata nuovamente, il primo recupero dei dati richiede spesso più di 10 secondi per tornare al browser. Dopo ciò, le prestazioni vanno bene fino alla prossima volta che l'applicazione viene lasciata inutilizzata.
Ho messo traccia nell'applicazione e vediamo che il ritardo è quando si apre la connessione. La query effettiva sul database viene eseguita al secondo.
Ho notato che con diverse configurazioni di hosting ottengo risultati diversi. In particolare, l'hosting in house e il puntamento al database di Azure non si verificano in alcun modo in prossimità degli stessi ritardi.
Ho modificato una delle routine per utilizzare ADO.NET invece di Entity Framework e ho modificato la traccia per cercare di restringerla ulteriormente.
Quello che vedo è questo:
ConnectionStringSettings ADOcnxstring = ConfigurationManager.ConnectionStrings["DevFEConnectAdo"];
DbConnection ADOconnection = new SqlConnection(ADOcnxstring.ConnectionString);
Il ritardo è qui (prima è stato ancora definito lo SQL
e poi generare il comando e fare il DataReader etc:
DbCommand ADOcommand = ADOconnection.CreateCommand();
:
etc
Quindi il ritardo è l'apertura del collegamento al database.
la mia connessione stringa è standard:
<add name="DevFEConnectAdo" connectionString="data
source=feeunsqldevfeconnect.database.windows.net;initial
catalog=feeunsqldbdevfeconnect;persist security info=True;user id=???
@???;password=???;multipleactiveresultsets=True"></add>
"il ritardo è quando si apre la connessione" Il ritardo * dovuto a * l'apertura o è solo il ritardo dall'inizio della richiesta all'apertura successiva? – usr
Il ritardo è occupato dall'istruzione Open stessa. Quindi la traccia include un momento in cui il servizio risponde alla richiesta, quindi l'istruzione successiva è la connessione aperta, che è quella che richiede tempo. – TimBunting