誰でもこのコードの問題点を教えていただけますか? ここには、渡されたオブジェクトのXML文字列を返すオブジェクトシリアライザがあります。MemoryStreamのリーク
これを複数回呼び出すプログラムがあり、私たちのメモリ使用量が高くなり(プログラムが終了してもそこにとどまっている)検索は完了しましたが、無駄になります。ストリームオブジェクトは "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);
}
}
ところで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;
}
}
多分、メモリが圧迫されていない可能性があります。 – ChaosPandion
ここに明らかに間違ったことはないようです。あなたはメモリプロファイラーでそれを実行しようとしましたか? – Dervall
例外がスローされていますか?シリアライザ呼び出しにストリームを渡しています。だから私はそこに少し疑いを持っています、私はストリームライフタイムは、using()ロケールをはるかに超えて拡張されていることを意味します。 – Zenwalker