c# - MemoryStream 和深度克隆

标签 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);
        }
    }

最佳答案

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

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

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

关于c# - MemoryStream 和深度克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7118816/

相关文章:

clone - 如何克隆数据包并更改 DPDK 中的以太网、IP 和 UDP header 字段?

c# - 永久类型转换到父类(super class)

java克隆错误

c# - 未从路由 C# 接收数据

c# - 如何将内存流下载到文件?

c# - 样式和脚本在局部 View 中不起作用

c# - linq lambda 多组连接

c# - Thread.CurrentPrincipal.Identity 与 HttpContext.User.Identity

c# - 套接字连接已中止 - CommunicationException

c# - argumentnullexception 位图保存到内存流