我在我的一个方法中使用MemoryStream作为深度克隆。我把这个方法称之为几次,我注意到它越多,它就越慢,我的程序就越慢。当我停止使用内存流时,有没有办法清除内存流?
public static T DeepClone<T>(T obj)
{
using (var ms = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
ms.Position = 0;
return (T)formatter.Deserialize(ms);
}
}
答案 0 :(得分:0)
每次调用时,memorystream都在using语句的末尾处理。然而,它可能不会被垃圾收集。我不认为潜在的内存使用是你的问题。如果你在调用之间获得明显的速度差异,我认为你每次都必须序列化一个更复杂的对象。如果您提供诊断声明,例如
Console.WriteLine("Serialized size "+ms.Position);
致电Serialize()
后,是否会每次报告相同的号码,或者增加规模?如果大小增加,那么每次都会序列化一个更大的对象图,并且预计会减速。