繁体   English   中英

MemoryStream和深度克隆

[英]MemoryStream and deep cloning

我在其中一种方法中将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);
        }
    }

每次调用时,都会在using语句的末尾分配内存流。 但是,可能要等到以后再进行垃圾收集。 我认为潜在的内存使用不是您的问题。 如果您在两次调用之间发现明显的速度差异,那么我认为您每次都必须序列化一个更复杂的对象。 如果您发布诊断陈述,例如

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

在调用Serialize() ,它每次都会报告相同的数字,还是会增加大小? 如果大小增加,则每次都在序列化一个较大的对象图,并且预期速度会变慢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM