bất cứ ai có thể cho chúng tôi biết điều gì sai với mã này dưới đây? chúng tôi có ở đây một serializer đối tượng mà nên trả về một chuỗi XML của bất kỳ đối tượng được truyền cho nó.MemoryStream leak
Chúng tôi đã gãi đầu về vấn đề này vì chúng tôi có chương trình gọi nhiều lần và chúng tôi thấy mức sử dụng bộ nhớ của chúng tôi tăng cao (và ở đó ngay cả sau khi chương trình đã hoàn tất). đã thực hiện tìm kiếm nhưng không có kết quả. đối tượng luồng nằm bên trong câu lệnh "đang sử dụng" vì vậy chúng tôi nghĩ rằng điều này được cho là được xử lý theo cách riêng của nó .. hãy trợ giúp.
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 trông như thế này:
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;
}
}
Có thể không có áp lực bộ nhớ để GC chỉ thực hiện dễ dàng. – ChaosPandion
Dường như không có gì rõ ràng là sai ở đây. Bạn đã thử chạy nó thông qua một bộ nhớ hồ sơ? – Dervall
Có ngoại lệ nào bị ném không? Bạn đang truyền luồng tới cuộc gọi nối tiếp. Vì vậy, tôi đang có một chút nghi ngờ ở đó, tôi có nghĩa là về thời gian sống suối được mở rộng nhiều hơn nữa của nó bằng cách sử dụng locale(). – Zenwalker