Je continue d'obtenir une exception 'System.OutOfMemoryException' au niveau du code ci-dessous. Je ne peux pas savoir où la fuite de mémoire est et ce serait une aide précieuse si quelqu'un pouvait expliquer ce que je fais mal. Merci!Révision de code: problème OutOfMemoryException
lock ((_tabs))
{
System.IO.StreamReader sr = null;
System.IO.MemoryStream ms = null;
try
{
Type[] t = { typeof(tsgPublicDecs.tsgClsTab) };
System.Xml.Serialization.XmlSerializer srl = new System.Xml.Serialization.XmlSerializer(typeof(ArrayList), t);
ms = new System.IO.MemoryStream();
srl.Serialize(ms, _tabs);
ms.Seek(0, 0);
sr = new System.IO.StreamReader(ms);
return sr.ReadToEnd();
}
finally
{
if (((sr != null)))
{
sr.Close();
sr.Dispose();
}
if (((ms != null)))
{
ms.Close();
ms.Dispose();
}
}
}
EDIT: Pour répondre à quelques-unes des questions:
- _tabs n'est pas peuplé avec quelque chose (ce qui soulève beaucoup d'autres questions pour lesquelles son même être utilisé, mais je vais devoir demander au développeur qui l'a écrit pour cela)
- La ligne qui lance l'erreur est 'srl.Serialize (ms, _tabs);'
- Cette erreur est aléatoire et j'ai été incapable de la dupliquer moi-même mais en la laissant tourner pendant quelques jours, elle sera lancée. Pour cette raison, je suis incapable (je ne sais pas comment) d'obtenir des informations au-delà de l'erreur lancée.
EDIT 2: Merci pour toutes les entrées. L'ajout d'observations et la recherche d'autres fuites de mémoire possibles semblent être la meilleure approche. C'est génial de voir à quelle vitesse les gens peuvent donner un coup de main!
Si vous utilisez "try", essayez {} catch (exception) {} finally {}. Autrement dit, vous avez raté la prise –
Quelle est la taille de _tabs? –
Quelle ligne lance l'exception? – FrustratedWithFormsDesigner