Erreur outofmemory Serialize

binouse1305 Messages postés 17 Date d'inscription mercredi 22 septembre 2004 Statut Membre Dernière intervention 30 janvier 2008 - 30 janv. 2008 à 12:23
binouse1305 Messages postés 17 Date d'inscription mercredi 22 septembre 2004 Statut Membre Dernière intervention 30 janvier 2008 - 30 janv. 2008 à 16:30
Bonjour,

Dans mon application serveur, lors de la sérialisation d'objets j'ai une erreur outofmemory. Apparemment ce là se produit lors de l'appel à la méthode Serialize.

ms = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, data);

data est de type object.

Normalement la mémoire est bien libérée puisque dans le finally je ferme bien mon MemoryStream :
finally
{
if (ms != null)
{
ms.Close();
ms = null;
}
}

Si vous avez une idée je suis prenneur...

<!-- / message -->

14 réponses

Miltiades Messages postés 233 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 octobre 2010
30 janv. 2008 à 13:46
Bonjour,

essaye de mettre un ms.Dispose() apres le close... parce que la tu ne libere pas ton objet, et si le garbage collector est un peu faineant (config par defaut) il ya fort a parier qu'il ne nettoye pas de suite ton objet...

Nul ne devient grand par la guerre...
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
30 janv. 2008 à 14:11
Si l'erreur est effectivement lévée lors de l'appel à Serialize, je ne vois pas en quoi le code qui suis dans le finally pourrait avoir un impact.

Tu dis que "data" est de type object, mais de quel genre de données s'agit il exactement? (quelle taille en particulier ? un constructeur par default avec du code spécifique ?)


Working as designed
www.nikoui.fr
0
binouse1305 Messages postés 17 Date d'inscription mercredi 22 septembre 2004 Statut Membre Dernière intervention 30 janvier 2008
30 janv. 2008 à 14:17
Je bosse pour une boîte qui prend des commandes et je bosse sur leurs logiciels.
Les objets sont de type Client. 99% du temps la sérialisation se passe très bien et parfois on a un outofmemoty qui fait planter les services.


Mon constructeur est private dans une classe internal



internal



class
CacheManagerHelper



{



#region
Constructeur privé




///


<summary>








///
Empêche la classe d'être instanciée






///


</summary>






private
CacheManagerHelper(){

}



#endregion
0
binouse1305 Messages postés 17 Date d'inscription mercredi 22 septembre 2004 Statut Membre Dernière intervention 30 janvier 2008
30 janv. 2008 à 14:19
ms.Dispose()
n'existe pas
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
binouse1305 Messages postés 17 Date d'inscription mercredi 22 septembre 2004 Statut Membre Dernière intervention 30 janvier 2008
30 janv. 2008 à 14:20
framework 1.1
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
30 janv. 2008 à 14:27
Je pense que le problème viens de l'objet que tu sérialise, mais difficile de dire comme ça d'où pourrais venir le problème exactement... L'objet est il réellement volumineux ? As tu besoin de sérialiser toutes les propriétés de l'objet ? L'object en question contient-il d'autres objects volumineux (genre dataset) ? etc...


Working as designed
www.nikoui.fr
0
Miltiades Messages postés 233 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 octobre 2010
30 janv. 2008 à 14:32
j'avais pas fait gaffe que ms etait le flux, m'apprendra a faire ca entre deux au boulot...

sinon je suis de l'avis de Nikoui, ca viens de ce que tu mets dans le flux, t'as peut etre a un moment un data "plus volumineux" (genre un dataset remplis... ca, ca peut etre volumineux)

désolé d'avoir repondu trop vite...

Nul ne devient grand par la guerre...
0
binouse1305 Messages postés 17 Date d'inscription mercredi 22 septembre 2004 Statut Membre Dernière intervention 30 janvier 2008
30 janv. 2008 à 14:42
En fait mon objet est un collection de clients. Cette collection une fois sérialisée peut faire entre 1 et 8Mo. on n'a jamais vu plus de 8Mo. (moins de 100 clients)
L'objet est relativement volumineux car nous embarquons beaucoup de données concernant les clients sur leurs anciennes commandes etc...
Pas de dataset.
Nous sommes obligés de sérialiser toutes les propriétés.
0
binouse1305 Messages postés 17 Date d'inscription mercredi 22 septembre 2004 Statut Membre Dernière intervention 30 janvier 2008
30 janv. 2008 à 14:57
Sur un serveur on peut avoir au max une centaine de ces Collections sérialisées (1 par vendeur). En générale ils font entre 2 et 4Mo.
0
binouse1305 Messages postés 17 Date d'inscription mercredi 22 septembre 2004 Statut Membre Dernière intervention 30 janvier 2008
30 janv. 2008 à 15:00
250 Mo au total sur un serveur (90 vendeurs) sachant que c'est un des serveurs où il y'a le plus de vendeurs.
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
30 janv. 2008 à 15:13
250Mo c'est ce que tu envois en une fois ? Dans ce cas, essaye peut être de morceler et de sérialiser en plus petits paquets...


Working as designed
www.nikoui.fr
0
binouse1305 Messages postés 17 Date d'inscription mercredi 22 septembre 2004 Statut Membre Dernière intervention 30 janvier 2008
30 janv. 2008 à 15:14
On fait fichier par fichier (environ 2 à 4Mo)
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
30 janv. 2008 à 15:26
Ca m'étonnes quand même que 4Mo pose problème... Y'a un truc quelque part :D (mais quoi, difficile a dire sans avoir le code sous la main)


Working as designed
www.nikoui.fr
0
binouse1305 Messages postés 17 Date d'inscription mercredi 22 septembre 2004 Statut Membre Dernière intervention 30 janvier 2008
30 janv. 2008 à 16:30
Ouais j'ai l'impression que ça arrive au bout d'un certain nombre de sérialisation/déserialisations.
Si tu veux que je t'envoie du code donne-moi ton e-mail. J'ai une adresse msn aussi si tu voudras qu'on en parle.
0
Rejoignez-nous