¿alguien puede decirnos qué le pasa a este código? tenemos aquí un serializador de objetos que debe devolver una cadena XML de cualquier objeto que se le pase.MemoryStream leak
nos hemos estado rascando la cabeza por esto, ya que tenemos un programa que llama a esto varias veces y vemos que nuestro uso de memoria se dispara (y permanecer allí incluso después de que el programa haya terminado) .. búsquedas hechas, pero fue en vano. el objeto de transmisión está dentro de una declaración de "uso", por lo que pensamos que se suponía que debía eliminarse por sí solo ... ayuda, por favor.
public static string ToXML(this IMessage m)
{
try
{
var serializer = SerializerFactory.Create(m.GetType());
using (var stream = new MemoryStream())
{
serializer.Serialize(new[] { m }, stream);
stream.Position = 0;
var s = Encoding.ASCII.GetString(stream.ToArray());
return s;
}
}
catch (Exception e)
{
return string.Format("Message unserializable: {0}", e.Message);
}
}
por cierto SerializerFactory se parece a esto:
public class SerializerFactory
{
public static IMessageSerializer Create(Type t)
{
var types = new List<Type> { t };
var mapper = new MessageMapper();
mapper.Initialize(types);
var serializer = new XmlMessageSerializer(mapper);
serializer.Initialize(types);
return serializer;
}
}
Quizás no haya presión de memoria, por lo que el GC simplemente se está tomando las cosas con calma. – ChaosPandion
No parece haber nada obviamente incorrecto aquí. ¿Has intentado ejecutarlo a través de un generador de perfiles de memoria? – Dervall
¿Alguna excepción que se arroje? Está pasando el flujo a la llamada de serializador. Así que estoy teniendo un poco de duda, me refiero a que el tiempo de vida de las transmisiones se extiende mucho más allá de su entorno de uso(). – Zenwalker