2013-03-18 56 views
1

this答案复制的对象,我成功复制我的对象。如何与最高性能

然而,表现在我的当前项目最高优先级。所以我做了一些单元测试,并检查了执行需要多长时间。结果是平均2秒,而我预计最多200毫秒!我发现90%的时间都花在了Object复印机上。

有没有增加这一性能的方式?任何其他方式来复制一个对象?有谁知道复制数组或列表的速度有多快?我会考虑使用这样的。

+0

有多少物体需要这个设施? – qujck 2013-03-18 21:10:33

+0

1,但它被复制几次。我的对象中最重要的属性是多维数组。所以我可以改变它(有很多修改:p)到一个简单的数组或列表中。我愿意这样做,如果它增加了性能大大 – dylanmensaert 2013-03-18 21:12:31

+0

硬编码的副本将胜过任何其他 – qujck 2013-03-18 21:12:58

回答

10

如果速度事项不依赖于一个完全通用的解决方案(特别是在这种情况下,在这种情况下,问题是这么难在表现确实受到一般情况下解决,容易的问题能够有效地要解决一般情况下),其中大部分通常依赖于序列化,由于花费在字符串处理上的时间/精力很多,所以它本质上不是高性能的。只需手动创建基于您知道其类型的对象,并根据您知道需要复制的内容手动复制相关字段。

此外,一定要仅做任何不可变对象的浅拷贝,而不是深拷贝,因为没有办法观察浅/深拷贝之间的差异。

+0

注意包含对本身不可变的对象的只读(即表面上不可变)引用的“虚假不可变”对象。如果这些物体被传递给持有它们的物体,它们可能会在包含物体的控制之外发生变异。解决方法是制作任何此类对象的防御副本,并将副本存储在包含对象中。 – 2013-03-18 21:13:39

+1

@MthetheWWatson非常真实。这就是为什么你可以从非泛化解决方案中获得如此多的收益(以及泛化如此困难的原因)在于,知道需要复制哪些信息以及哪些可以或不可以具有突变的可见副作用并不是什么可以自动确定。一个通用的解决方案被迫做出防御性的副本,但非一般性的解决方案可能不知道并获得性能优势。 – Servy 2013-03-18 21:15:51