J'ai construit une application C# qui met à jour une table DB MySQL toutes les 10 ms. L'application crée un thread distinct pour chaque mise à jour. En utilisant Workbench, je peux voir qu'il y a beaucoup de connexions et pendant un certain temps, cela a été assez réussi. Récemment cependant, je trouve qu'après 2-3 heures d'exécution réussie j'obtiens une exception qui indique "la table xxxx non trouvée". Je possède une lecture et une mise à jour à l'aide Entity Framework, comme suitException MySQL pendant la mise à jour en temps réel
try
{
u5s = (from u in cxt.universe5s
where u.CATEGORY == tval
select u).ToList();
. . .
u5.PC_CHANGE = chval;
cxt.SaveChanges();
}
catch (Exception myEx)
{
//throws my 'table not found' exception here
}
Utilisation de NET 4.0 et MySql 5.5.9. Est-ce que quelqu'un d'autre a une expérience comme celle-ci? Cela pourrait-il être causé par l'épuisement des connexions? Quelle est la meilleure pratique dans ce cas en ce qui concerne la fermeture de la connexion après l'enregistrement des modifications?
Sincèrement Richard
H'mm. Je dépendais de MySQL pour régler les problèmes de concurrence. Je ne voulais pas que mes verrous ralentissent l'accès, mais c'est moins logique maintenant que je génère un thread pour chaque mise à jour. Le lien que vous avez donné est très utile, même si je ne suis pas sûr de ce que vous entendez par verrouillage sur un "objet de connexion". Est-ce le contexte db "cxt" dans mon exemple de code? Donc, est-ce que j'embaquerais tout dans le bloc try avec "lock (cxt) {...}?" La citation MSDN semble mettre l'accent sur l'utilisation d'une variable privée comme un verrou.Je suis un peu ignorant de ce qui sert de verrou – viejo
Si vous aimez ce produit, vous pouvez créer un objet dédié à votre travail: objet privé connectionLock = new object(); – LueTm
OK! Alors c'est juste comme l'exemple que vous avez donné dans le lien.Merci, je vais l'implémenter de cette façon.J'apprécie votre aide.Sincèrement, Richard – viejo