J'utilise JMeter pour tester mon application web. et mon scénario de test consiste à ajouter un enregistrement dans la base de données. Ensuite, j'ai fixé le "nombre de threads" à 20, ce qui signifie que 20 utilisateurs travailleront en même temps. Puis j'ai exécuté le cas de test. Mais finalement, j'ai constaté que le système n'a pas créé 20 enregistrements dans la base de données, mais seulement 13 enregistrements dans la base de données.
Je voudrais savoir pourquoi cela s'est produit ? Est-il possible que dans mon application web je n'ai pas ajouté un "synchronized" devant la méthode d'ajout d'enregistrements ? J'ai utilisé linq, si deux utilisateurs postent une requête pour créer un enregistrement au serveur en même temps, que se passera-t-il ? Un seul enregistrement sera créé ou deux enregistrements seront créés avec succès, ou inconnu ?
Voici un exemple de code pour créer un enregistrement dans la base de données :
public int SaveEventGroup(int id, Models.Entities.EventGroup e, Nullable<int> setpublish)
{
try
{
Entities.EventGroup db;
if (id == 0)
{
db = new Entities.EventGroup();
db.CreatedBy = e.CreatedBy;
db.CreateDatetime = DateTime.Now;
db.Status = true;
}
else
{
db = this.GetEventGroup(id);
}
db.NameCN = e.NameCN;
db.NameEN = e.NameEN;
db.NameZH = e.NameZH;
db.NamePT = e.NamePT;
db.DisplayOrder = GetGroupMaxDisplayOrder() + 1;
if (setpublish == null)
{
db.PublishStatus = false;
db.PublishDatetime = null;
db.UpdateDatetime = DateTime.Now;
db.UpdatedBy = e.UpdatedBy;
}
if (id == 0)
dataContext.AddToEventGroupSet(db);
dataContext.SaveChanges();
return db.Id;
}
catch (Exception ex)
{
log.Error(ex.Message, ex);
throw ex;
}
}