C# MysqlConnection ne rime pas avec Multithreading?

Inscrit
6 Avril 2016
Messages
85
Reactions
40
#1
Bonjour/bonsoir,

Je me retrouve aujourd'hui confronté a un léger soucis et je me demandais si je pouvais trouver quelques braves gens pour m'éclairer

J'ai codé un petit serveur en C#.Net qui gère un grand nombre de client, ceux-ci représentent des joueurs (ah oui, il s'agit d'un émulateur dofus) et peuvent être sauvegardés a tout moment. (Base de donnée Mysql via la librairie Mysql.Data principalement)

Afin de ne pas avoir de problème avec le resultset ('There is already a datareader associated with this connection)

j'avais pensé a faire une connexion SQL avec la base de donnée par client (au détriment d'une globale qui pose des problèmes vus que je fais du multi-threading avec mes sockets)

Qu'en pensez vous ? une connexion SQL par client en terme de performances, est-ce viable je trouve que ça fait beaucoup d'objet pour un problème comme celui-ci?

Votre réponse me permettra d'avancer et de concevoir l'ORM lié a mon projet

Merci d'avance
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
150
#2
Ah oui beaucoup beaucoup d'objets inutilement...
Tu as une manière simple de gérer la connexion, c'est via une classe static qui sera accessible de n'importe ou dans le projet avec des Models et des Tables.
J'ai récupéré justement ce genre de code d'un émulateur 1.29 codé en C# ArkaliaCore-master.

Tu devrais t'en inspirer:
http://www.megafileupload.com/fq6S/Database.rar

Sinon je ne comprend pas du tout ta volonté de créer une connexion par client, sachant que il ne s'agit que d'un seule requête à chaque fois pour UPDATE/SET les données.
 
Dernière édition:
Inscrit
6 Avril 2016
Messages
85
Reactions
40
#3
Ah oui beaucoup beaucoup d'objets inutilement...
Tu as une manière simple de gérer la connexion, c'est via une classe static qui sera accessible de n'importe ou dans le projet avec des Models et des Tables.
J'ai récupéré justement ce genre de code d'un émulateur 1.29 codé en C# ArkaliaCore-master.

Tu devrais t'en inspirer:
http://www.megafileupload.com/fq6S/Database.rar

Sinon je ne comprend pas du tout ta volonté de créer une connexion par client, sachant que il ne s'agit que d'un seule requête à chaque fois pour UPDATE/SET les données.
Le systeme dont tu parles est déja celui que j'utilise (DatabaseWriter<MaTable>().Insert(object));

Voici un exemple de problème :

Je lance une sauvegarde serveur

Pendant la sauvegarde serveur, un client se connecte, le serveur world (qui est actuellement en train de sauvegarder) a besoin de récupérer directement en base de donnée, les startupactions qui sont liés au compte (et celle-ci doivent être récupéré directement, elle ne peuvent être mis en cache)

=> Boom 'There is already a dataready associated' :3
 
Dernière édition par un modérateur:

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
150
#4
Il suffit de mettre en place un système de file d'attente pour les actions sur la bdd :D
 
Inscrit
27 Février 2016
Messages
27
Reactions
0
#5
Tu peux aussi fermer l'accès au serveur world en cas de sauvegarde
 
Haut Bas