Performance 在scala中快速复制对象内容
我有一个几乎没有Int和Double字段的类。将所有数据从一个对象复制到另一个对象的fastes方法是什么Performance 在scala中快速复制对象内容,performance,scala,Performance,Scala,我有一个几乎没有Int和Double字段的类。将所有数据从一个对象复制到另一个对象的fastes方法是什么 class IntFields { private val data : Array[Int] = Array(0,0) def first : Int = data(0) def first_= (value: Int) = data(0) = value def second : Int = data(1) def second_= (value : Int) =
class IntFields {
private val data : Array[Int] = Array(0,0)
def first : Int = data(0)
def first_= (value: Int) = data(0) = value
def second : Int = data(1)
def second_= (value : Int) = data(1) = value
def copyFrom(another : IntFields) =
Array.copy(another.data,0,data,0,2)
}
这是我可以建议的方式。但我怀疑它是否真的有效,因为我不清楚scala的内部结构
更新1:
事实上,我正在寻找Scala的等价的C++ MeMCPY。我只需要取一个简单的对象,一个字节一个字节地复制它的内容
数组复制只是一种黑客行为,我在谷歌上搜索了普通的scala支持的方法,但没有找到
更新2:
我试着用microbenchmark标记两个持有者:带有12个变量的简单case类和一个带有数组的备份类。在所有基准测试中(简单的复制和复杂的集合计算),基于阵列的解决方案的工作速度较慢,约为7%
因此,我需要其他方法来模拟memcpy。因为用于
Array.copy
的两个数组都是原始整数数组(也就是说,在这种情况下,不是其中一个包含装箱整数,在这种情况下,而带有装箱/取消装箱的循环将用于复制元素),它与Java系统一样有效。也就是说,如果这是一个巨大的数组,您可能会看到与复制元素的while
循环相比的性能差异。由于阵列只有2个元素,因此仅执行以下操作可能更有效:
def copyFrom(another: IntFields) {
data(0) = another.data(0)
data(1) = another.data(1)
}
编辑:
我认为最快的方法就是一个接一个地复制字段。如果性能非常重要,你应该考虑使用<代码>不安全.GETIN < /C> >某些报告应该比使用<代码>系统更快。对于小块,ArayIcase<代码>:它应该有大约12个字段。如果这对性能至关重要,我会写一个微基准来确认这一点。请参阅关于编写微基准的说明。