MemoryStream和深度克隆

时间:2011-08-19 08:23:21

标签: c# clone memorystream

我在我的一个方法中使用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);
        }
    }

1 个答案:

答案 0 :(得分:0)

每次调用时,memorystream都在using语句的末尾处理。然而,它可能不会被垃圾收集。我不认为潜在的内存使用是你的问题。如果你在调用之间获得明显的速度差异,我认为你每次都必须序列化一个更复杂的对象。如果您提供诊断声明,例如

Console.WriteLine("Serialized size "+ms.Position);

致电Serialize()后,是否会每次报告相同的号码,或者增加规模?如果大小增加,那么每次都会序列化一个更大的对象图,并且预计会减速。