Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 在scala中快速复制对象内容_Performance_Scala - Fatal编程技术网

Performance 在scala中快速复制对象内容

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) =

我有一个几乎没有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) = 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个字段。如果这对性能至关重要,我会写一个微基准来确认这一点。请参阅关于编写微基准的说明。