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);
}
}
内存流在每次调用using语句结束时被dispose。但是,它可能直到稍后才被垃圾收集。我不认为潜在的内存使用是你的问题。如果在调用之间发现明显的速度差异,我认为您每次都序列化了一个更复杂的对象。如果您有一个诊断语句,如
Console.WriteLine("Serialized size "+ms.Position);
呼叫Serialize()
后,每次报告的号码是相同的,还是越来越大?如果大小增加,那么每次序列化的对象图就会变大,并且速度会减慢。