Bonjour à tous,
Je développe actuellement une application serveur qui contient comme base de données un DataSet (récupéré au démarrage sur une vraie BDD).
Ce serveur traite les demandes des clients et envoi donc les tables de mon DataSet aux clients qui en ont besoin.
J'envoi mes tables par l'intermediaire d'un dataset temporaire que je remplis au fur et à mesure avec les tables requises uniquement, ce DataSet je le sérialise et l'envoi ensuite via un socket.
Mon gros problème se situe au niveau de la sérialisation, mon DataSet avec la méthode DataSet.WriteXML(...) ne pèse que 5Mo sur le disque dur. Mais lorsque j'envoie la totalité de mon DataSet la fonction Serialize() me prend presque 50 à 60 Mo en mémoire vive et ne la libère pas une fois la fonction retournée. Ce qui fait qu'au bout de 2 ou 3 clients connectés ça grimpe très très vite en mémoire. Au démarrage mon serveur fait 60 Mo en mémoire après la connexion de 2 ou 3 clients, je me retrouve avec 250 Mo (ensuite la mémoire descend / remonte ... mais ne dépasse plus cette valeur), ce qui me gène c'est que la base de données est quasi vide, c'était une base de test cela va donc me prendre beaucoup plus de place.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Private Function SerializeStream() As Byte() Dim fmtServices As BinaryFormatter = New BinaryFormatter 'Binary Dim tempStream As MemoryStream = New MemoryStream Dim temp As Byte() Dim dsTemp As DataSet = New DataSet [...] ' Traitement pour ajouter les tables au DataSet temporaire "dsTemp" fmtServices.Serialize(tempStream, dsTemp) ' Sérialisation temp = tempStream.ToArray() ' Transformation de ma sérialisation en tableau de byte pour l'envoyer via socket tempStream.Close() Return temp 'Renvoi de mon tableau à envoyer directement End Function
Je me demandais donc s'il y avait une autre option que le MemoryStream pour envoyer mon DataSet ? Ou y a t il une autre option que je puisse utiliser autre que forcer mon Garbage Collector (on m'a conseille de pas trop y toucher)
Merci beaucoup
Partager