J'ai créé un service Web qui est appelé du côté client pour stocker les données dans la base de données. Ces données sont envoyées toutes les 200 ms par un seul utilisateur et chaque fois que les données sont envoyées, la connexion à la base de données est ouverte et fermée ce qui, à mon avis, n'est pas bon pour la performance.Gestion de base de données à partir du service Web - comment améliorer les performances?
Les données sont stockées en appelant la méthode REST.StoreAcceleration() et SQLWorks.StoreAcceleration() de la manière suivante:
public Response StoreAcceleration(string strSessionString, string strMeasurementTime, string strAccelerationX, string strAccelerationY, string strAccelerationZ)
{
SQLWorks sqlWorks = new SQLWorks();
Response response = new Response();
try
{
string strTime = strMeasurementTime.Replace("_", " ");
DateTime measurementTime = DateTime.ParseExact(strTime, "yyyy-MM-dd HH:mm:ss:fff", null);
double accelerationX = Convert.ToDouble(strAccelerationX.Replace(".", ","));
double accelerationY = Convert.ToDouble(strAccelerationY.Replace(".", ","));
double accelerationZ = Convert.ToDouble(strAccelerationZ.Replace(".", ","));
sqlWorks.StoreAcceleration(strSessionString, measurementTime, accelerationX, accelerationY, accelerationZ);
response.Successful = true;
response.Comment = "Stored!";
}
catch(Exception ex)
{
string sDummy = ex.ToString();
response.Comment = "an error occured!";
response.Successful = false;
}
return response;
}
public bool StoreAcceleration(string strStringSession, DateTime receivedTime, double accelerationX, double accelerationY, double accelerationZ)
{
bool result = false;
string select =
"INSERT INTO acceleration (session_id, measurement_time, acceleration_x, acceleration_y, acceleration_z) VALUES (@sessionID, @measurementTime, @accelerationX, @accelerationY, @accelerationZ)";
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(select, conn);
int sessionID = getSessionID(strStringSession);
if(sessionID == 0)
return false;
updateSessions(sessionID);
string strRecordTime = receivedTime.ToString("yyyy-MM-dd HH:mm:ss:fff");
cmd.Parameters.AddWithValue("sessionID", sessionID.ToString());
cmd.Parameters.AddWithValue("measurementTime", strRecordTime);
cmd.Parameters.AddWithValue("accelerationX", accelerationX.ToString());
cmd.Parameters.AddWithValue("accelerationY", accelerationY.ToString());
cmd.Parameters.AddWithValue("accelerationZ", accelerationZ.ToString());
try
{
conn.Open();
cmd.ExecuteNonQuery();
result = true;
}
catch(Exception ex)
{
string sDummy = ex.ToString();
}
finally
{
conn.Close();
}
return result;
}
Le problème ici est que SqlConnection est ouvert et fermé à chaque appel de méthode.
J'apprécierais que quelqu'un puisse suggérer comment améliorer la solution afin d'empêcher l'ouverture/la fermeture fréquente de la base de données.
Merci!
Avez-vous réellement un problème de performance, ou optimisez-vous simplement pour le plaisir? –
S'il y a un problème de performance, je regarderais de plus près la base de données. Même si j'ai nettoyé un peu le code, ça ne sera pas beaucoup plus rapide. * À moins que * la mise en commun des connexions ait été désactivée, bien sûr. – Thorarin