【发布时间】:2011-08-19 08:23:20
【问题描述】:
我在我的一种方法中使用 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...
-
@zenwalker 我反驳说;即使是缓慢的 BinaryFormatter 也可以。可以使用更快的序列化程序。
-
到目前为止,我已经阅读了每一个序列化成本高昂的地方。但是,如果 OP 对此感到满意,那么我不明白他为什么在这里抱怨进展缓慢。
-
德米特里:这里的数据是什么?它可以可能通过 protobuf-net 完成,该网络针对这种类型的使用进行了极大的优化(现在已经有 2 天了,但是如果你想要一个示例并且可以等待......)
标签: c# clone memorystream