MemoryStream和深度克隆

本文关键字:深度 MemoryStream | 更新日期: 2023-09-27 18:05:59

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

MemoryStream和深度克隆

内存流在每次调用using语句结束时被dispose。但是,它可能直到稍后才被垃圾收集。我不认为潜在的内存使用是你的问题。如果在调用之间发现明显的速度差异,我认为您每次都序列化了一个更复杂的对象。如果您有一个诊断语句,如

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

呼叫Serialize()后,每次报告的号码是相同的,还是越来越大?如果大小增加,那么每次序列化的对象图就会变大,并且速度会减慢。