아래의 코드에서 잘못된 점을 알려줄 수 있습니까? 여기에는 전달 된 모든 객체의 XML 문자열을 반환해야하는 객체 직렬자가 있습니다.MemoryStream leak
우리는이 코드를 여러 번 호출하는 프로그램이 있고 우리의 메모리 사용량이 하늘 높이 올라간다는 것을 알았으므로 (프로그램이 완료된 후에도 거기에 머물러 있습니다.) 우리는이 코드를 통해 우리의 머리를 긁어 왔습니다. 검색은 끝났지 만 아무 소용이 없습니다. 스트림 객체는 "using"문 안에 있습니다. 그래서 우리는이 객체가 독자적으로 처리되어야한다고 생각했습니다. 도움을주십시오.
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);
}
}
은 BTW SerializerFactory은 다음과 같습니다
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;
}
}
아마도 메모리가 부족하여 GC가 쉽게 사용할 수 있습니다. – ChaosPandion
여기서 분명히 잘못된 것은 없습니다. 메모리 프로파일 러를 통해 실행 해 보았습니까? – Dervall
예외가 발생 했습니까? serializer 호출에 스트림을 전달 중입니다. 그래서 나는 거기에 약간의 의문을 품고있다. 스트림 수명 시간이 using() 로케일을 훨씬 넘어서 확장된다는 것을 의미한다. – Zenwalker