我有以下扩展方法来克隆包含项目的列表:
public static class MyExtensionMethods
{
public static T CloneXml<T>(this T source)
{
var stream = new MemoryStream();
var xmls = new XmlSerializer(typeof(T));
xmls.Serialize(stream, source);
stream.Seek(0, SeekOrigin.Begin);
return (T)xmls.Deserialize(stream);
}
public static T CloneBinary<T>(this T source)
{
var formatter = new BinaryFormatter();
var stream = new MemoryStream();
formatter.Serialize(stream, source);
stream.Seek(0, SeekOrigin.Begin);
return (T)formatter.Deserialize(stream);
}
}
对于测试,我使用以下对象:
[Serializable]
public class MyItem
{
public string Name { get; set; }
}
现在,当我克隆 100 个 MyItem 对象的列表时,BinaryFormatter 解决方案 (1ms) 将比我的 XmlSerializer 解决方案 (110ms) 快得多。但是如果列表中有 100000 个 MyItem 对象,BinaryFormatter 解决方案 (1s) 将比 XmlSerializer 解决方案 (450ms) 慢。
这里发生了什么?